Java通过Socket实现TCP编程,实现用户登录之服务器相应客户端,客户端和服务端之间的通信

服务器端:

  1.创建ServerSocket对象,绑定监听端口;

  2.通过accept()方法监听客户端请求;

  3.建立连接后通过输入流读取客户端发送的请求信息;

  4.通过输出流向客户端发送响应信息;

package com.wxd.socket;import java.io.*;import java.net.ServerSocket;import java.net.Socket;/**
 * 基于TCP协议的Socket通信,实现用户登录,服务端 */public class Server {    public static void main(String[] args) {        try {            //服务端            //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
            ServerSocket serverSocket =new ServerSocket(10086);//1024-65535的某个端口            //2、调用accept()方法开始监听,等待客户端的连接
            Socket socket = serverSocket.accept();            //3、获取输入流,并读取客户端信息
            InputStream is = socket.getInputStream();
            InputStreamReader isr =new InputStreamReader(is);
            BufferedReader br =new BufferedReader(isr);
            String info =null;            while((info=br.readLine())!=null){
                System.out.println("我是服务器,客户端说:"+info);
            }
            socket.shutdownInput();//关闭输入流            //4、获取输出流,响应客户端的请求
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("欢迎您!");
            pw.flush();            //5、关闭资源            pw.close();
            os.close();
            br.close();
            isr.close();
            is.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
控制台输出:

我是服务器,客户端说:用户名:admin;密码:123

客户端:

  1.创建socket对象,指明需要连接的服务器地址和端口号;

  2.建立连接后,通过输出流向服务器端发送请求信息;

  3.通过输入流获取服务器的响应信息;

  4.关闭相关资源;

package com.wxd.socket;import java.io.*;import java.net.Socket;/**
 * 基于TCP协议的Socket通信,实现客户端 */public class Client {    public static void main(String[] args) {        try {            //客户端            //1、创建客户端Socket,指定服务器地址和端口
            Socket socket =new Socket("localhost",10086);            //2、获取输出流,向服务器端发送信息
            OutputStream os = socket.getOutputStream();//字节输出流
            PrintWriter pw =new PrintWriter(os);//将输出流包装成打印流
            pw.write("用户名:admin;密码:123");
            pw.flush();
            socket.shutdownOutput();            //3、获取输入流,并读取服务器端的响应信息
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String info = null;            while((info=br.readLine())!=null){
                System.out.println("我是客户端,服务器说:"+info);
            }            //4、关闭资源            br.close();
            is.close();
            pw.close();
            os.close();
            socket.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

控制台输出:

我是客户端,服务器说:欢迎您!

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2018-10-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏电光石火

Eclipse安装SVN插件

SVN插件下载地址及更新地址,你根据需要选择你需要的版本。现在最新是1.8.x Links for 1.8.x Release: Eclipse u...

185100
来自专栏格子的个人博客

mysql5.7.21安装和主从同步

很久之前就做过mysql的部分应用架构,包括主从复制和集群等,一直没有形成博客记录下来,虽然网上也有很多的相关资料,但是出于加深记忆,还是把自己的操作步骤和截图...

14110
来自专栏容器云生态

监控利器之nagios原理详解

第一节 Nagios简介 nagios是系统管理人员和运维监控人员必须的工具之一,利用nagios可以监控本地或者远程主机资源, 如磁盘空间,系统负载等情况,...

44280
来自专栏程序员阿凯

Android Studio下的单元测试

16940
来自专栏Golang语言社区

社区leaf学习笔记|03. 调试Game、Login模块收发消息

14420
来自专栏运维

Cacti插件安装之nagios

一,安装nagios useradd nagios必须的,要不make install时过不去 wget http://cdnetworks-kr-1.d...

13740
来自专栏pangguoming

centos7安装redis

方法一:使用命令安装(前提是已经安装了EPEL)。 安装redis: yum -y install redis 启动/停止/重启 Redis  启动...

53580
来自专栏kevin-blog

linux给终端、git设置代理

因为我大中国的国情~(咳咳,你们懂得),很多时候给我们造成很多不便,一些软件的下载,需要挂代理才能完成,而在linux下,怎么给我们的终端设置代理呢?

81810
来自专栏王磊的博客

PowerDesigner版本控制器设置权限

PowerDesigner版本控制权限之前一直在Groups里面设置,一直没有效果,原因终于找出来了,PowerDesigner是要对每个库单独赋权限的,步骤如...

380120
来自专栏Web 开发

Windows Live Writer Beta 15 的FTP图片功能的确好用

这样的话,图片会默认上传到你的FTP服务器上面,这个FTP服务器,当然是用回Godaddy赠送的超大流量容量空间了,这个比在Godaddy上面装图床软件,还要手...

9420

扫码关注云+社区

领取腾讯云代金券