一、概念

TCP:Transmission Control Protocol,传输控制协议,面向连接的协议,两台机器的可靠无差错的数据传输,双向字节流传递

  • TCP协议:有链接、保证可靠的无误通讯
    • 服务器:创建一个ServerSocket,等待连接
    • 客户机:创建一个Socket,连接到服务器
    • 服务器:ServerSocket接收到连接,创建一个Socket和客户的Socket建立专线连接,后续服务器和客户机的对话(一对Socket)会在一个单独线程运行

image-20200618211513710.png

  • ServerSocket:服务器码头,需要绑定Port,如果有多块网卡,需要绑定一个IP地址
  • Socket:运输通道,客户端需要绑定服务器的地址和Port,客户端往Socket输入流写入数据,送到服务端,客户端从Socket输出流取服务端的应答,服务端反之亦然
  • 服务端等待响应时,处于阻塞状态
  • 服务端可以同时响应多个客户端
  • 服务端每接受一个客户端,就启动一个独立线程
  • 客户端或者服务端都可以选择关闭这对Socket

    二、实例

    服务端
    package tcp;
    import java.io.;
    import java.net.
    ;
    public class TcpTestServer {
    public static void main(String[] args) {
    try{
    ServerSocket ss = new ServerSocket(8080);
    Socket s = ss.accept();
    System.out.println(“welcome TCP connection”);
    InputStream ips = s.getInputStream();
    OutputStream ops = s.getOutputStream();
    ops.write(“hello,client”.getBytes());
    BufferedReader br = new BufferedReader(new InputStreamReader(ips));
    System.out.println(“recive Client:”+br.readLine());
    ips.close();
    ops.close();
    }catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    客户端
    package tcp;
    import jdk.management.resource.internal.inst.SocketInputStreamRMHooks;
    import java.io.;
    import java.net.
    ;
    public class TcpTestClient {
    public static void main(String[] args) {
    try{
    Socket s = new Socket(InetAddress.getByName(“127.0.0.1”),8080);
    InputStream ips = s.getInputStream();
    BufferedReader brNet = new BufferedReader(new InputStreamReader(ips));
    OutputStream ops = s.getOutputStream();
    DataOutputStream dos = new DataOutputStream(ops);
    BufferedReader brKey = new BufferedReader(new InputStreamReader(System.in));
    while (true)
    {
    String strWord = brKey.readLine();
    if (strWord.equalsIgnoreCase(“quit”))
    {
    break;
    }else{
    System.out.println(“I want to send :”+strWord);
    dos.writeBytes(strWord+System.getProperty(“line.separator”));
    System.out.println(“Recive Server :”+brNet.readLine());
    }
    }
    dos.close();
    brNet.close();
    } catch (UnknownHostException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }