Java TCP 服务器:三次握手和四次挥手实现示例
import\u0020java.io.DataInputStream;import\u0020java.io.DataOutputStream;import\u0020java.io.IOException;import\u0020java.net.ServerSocket;import\u0020java.net.Socket;import\u0020java.util.Random;public\u0020class\u0020Server\u0020{\u0020ServerSocket\u0020sSocket\u0020=\u0020null;Socket\u0020socket;int\u0020port\u0020=\u00208888;DataInputStream\u0020di\u0020=\u0020null;DataOutputStream\u0020dou\u0020=\u0020null;public\u0020Server()\u0020throws\u0020IOException\u0020{\u0020sSocket\u0020=\u0020new\u0020ServerSocket(8888);\u0020}public\u0020void\u0020handshake()\u0020throws\u0020Exception\u0020{\u0020socket\u0020=\u0020sSocket.accept();di\u0020=\u0020new\u0020DataInputStream(socket.getInputStream());dou\u0020=\u0020new\u0020DataOutputStream(socket.getOutputStream());String\u0020clientSYN1\u0020=\u0020di.readUTF();String\u0020clientACK1\u0020=\u0020di.readUTF();String\u0020clientseq1\u0020=\u0020di.readUTF();System.out.println("第一次握手");System.out.println("从客户端接受到的SYN="\u0020+\u0020clientSYN1);System.out.println("从客户端接受到的ACK="\u0020+\u0020clientACK1);System.out.println("从客户端接收到的seq="\u0020+\u0020clientseq1);String\u0020serverack\u0020=\u0020seqTransferAck(clientseq1);String\u0020serverACK\u0020=\u0020"1";String\u0020serverseq\u0020=\u0020new\u0020Random().nextInt(1000)+"";String\u0020serverSYN\u0020=\u0020"1";dou.writeUTF(serverACK);dou.writeUTF(serverSYN);dou.writeUTF(serverseq);dou.writeUTF(serverack);String\u0020clientSYN3\u0020=\u0020di.readUTF();String\u0020clientACK3\u0020=\u0020di.readUTF();String\u0020clientseq3\u0020=\u0020di.readUTF();String\u0020clientack3\u0020=\u0020di.readUTF();System.out.println("第三次握手");System.out.println("从客户端获得的SYN="\u0020+\u0020clientSYN3);System.out.println("从客户端获得的ACK="\u0020+\u0020clientACK3);System.out.println("从客户端获得的seq="\u0020+\u0020clientseq3);System.out.println("从客户端获得的ack="\u0020+\u0020clientack3);System.out.println("");String\u0020fin\u0020=\u0020di.readUTF();String\u0020fseq\u0020=\u0020di.readUTF();System.out.println("第一次挥手");System.out.println("从客户端获得的fin="\u0020+\u0020fin);System.out.println("从客户端获得的seq="\u0020+\u0020fseq);String\u0020fACK2\u0020=\u0020"1";String\u0020fseq2\u0020=\u0020new\u0020Random().nextInt(1000)+"";String\u0020fack2\u0020=\u0020seqTransferAck(fseq);dou.writeUTF(fACK2);dou.writeUTF(fseq2);dou.writeUTF(fack2);String\u0020fin3\u0020=\u0020"1";String\u0020fseq3\u0020=\u0020new\u0020Random().nextInt(1000)+"";String\u0020fack3\u0020=\u0020seqTransferAck(fseq);dou.writeUTF(fin3);dou.writeUTF(fseq3);dou.writeUTF(fack3);String\u0020fACK4\u0020=\u0020di.readUTF();String\u0020fseq4\u0020=\u0020di.readUTF();String\u0020fack4\u0020=\u0020di.readUTF();System.out.println("第四次挥手");System.out.println("从客户端获得的ACK="\u0020+\u0020fACK4);System.out.println("从客户端获得的seq="\u0020+\u0020fseq4);System.out.println("从客户端获得的ack="\u0020+\u0020fack4);\u0020}public\u0020String\u0020seqTransferAck(String\u0020s)\u0020{\u0020int\u0020i\u0020=\u0020Integer.parseInt(s);i\u0020=\u0020i\u0020+\u00201;return\u0020String.valueOf(i);\u0020}public\u0020static\u0020void\u0020main(String[]\u0020args)\u0020throws\u0020IOException,\u0020Exception\u0020{\u0020new\u0020Server().handshake();\u0020}\u0020
原文地址: https://www.cveoy.top/t/topic/pP9B 著作权归作者所有。请勿转载和采集!