1.1 TCP三次握手
1.第一次握手:客户端发送信息给服务器(服务器确定能接受信息)
2.第二次握手:服务器接收信息并回复客户端(客户端确定能接收,发送信息,服务器确定能接受信息)
3.第三次握手:客户端回复服务器端已接收信息(服务器确定能发送信息)
1.2 客户端搭建
1.创建Socket对象
//创建Socket对象,连接指定服务器(ip),端口(8888) //127.0.0.1 本地IP Socket socket=new Socket("127.0.0.1","8888");
2.创建IO流(发送,接收数据)
//得到输入,输出流(字节流) InputStream is=null; OutputStream os=null; is=socket.getInputStream();//接收数据 os=socket.getOutputStream();//发送数据
3.发送,接收数据
//发送数据 String str="你好,服务器"; os.write(str.getBytes()); //关流 socket.shutdownOutput(); //接收数据(字节流转换成字符流,便于读写操作) BufferedReader br=new BufferedReader(new InputStreamReader(is)); //读取一行数据 String reply=br.readLine(); System.out.println("服务器端:"+reply); socket.shutdownInput();
4.关闭资源
//关闭资源 br.close(); socket.close();
1.3服务器端搭建
1.创建ServerSocket,绑定客户端端口(1024之前端口不要使用,端口范围: 0~65535)
//服务器开启 ServerSocket serverSocket=new ServerSocket("8888"); //等待客户端请求后连接 Socket socket=serverSocket.accept();//未请求时阻塞
1.4使用多线程搭建服务器端
1.创建服务器端
ServerSocket serverSocket=new ServerSocket("8888"); while(true){ //等待客户端请求后连接 Socket socket=serverSocket.accept();//未请求时阻塞 //开启线程 new TxtNovelThread(socket).start(); }
2.创建服务器端线程(未处理异常)
//1.创建一个socket对象,接收客户端请求 private Socket socket; //2.创建一个有socket的构造方法,便于调用 public TxtNovelThread(Socket socket) { this.socket = socket; } //3.重写run方法 @Override public void run() { //所有IO流初始为null InputStream is = null; OutputStream os = null; BufferedReader br=null; is=socket.getInputStream();//接收数据 os=socket.getOutputStream();//发送数据 //接收客户端数据(字节流转换成字符流,便于读写操作) BufferedReader br=new BufferedReader(new InputStreamReader(is)); //读取一行数据 String reply=br.readLine(); System.out.println("客户端:"+reply); socket.shutdownInput(); //判断非空,关闭资源 if(br!=null) br.close(); if(socket!=null) socket.close(); }