一、TCP套接字编程架构如下
![TCP](https://img-blog.csdnimg.cn/direct/31cfd1fc231641969e3fbe0f2c3a463a.png)
二、相关代码实现
1、服务器端代码
package com.company;import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;public class Main {public static void main(String[] args) {
try {ServerSocket serverSocket = new ServerSocket(8081,3);System.out.println("服务开始进行监听,监听端口为8081");int i=1;while(true){Socket socket = serverSocket.accept();byte[] byet1=new byte[20];try {socket.getInputStream().read(byet1);String str =new String(byet1);System.out.println(str);InetSocketAddress socketAddress=(InetSocketAddress)socket.getRemoteSocketAddress();System.out.println(socketAddress.getHostName()+" "+socketAddress.getPort());} catch (IOException e) {e.printStackTrace();}try {Thread.sleep(50000);socket.close();} catch (InterruptedException e) {e.printStackTrace();}}} catch (IOException e) {e.printStackTrace();}}
}
- 1、创建服务,并监听特定的端口,设置TCP链接队列长度;
- 2、backlog可以设置队列的长度,成功创建链接的会被存储到此全连接队列中,等待线程调用accept方法将其从中一个一个移出;
2、客户端代码
package com.company;import java.io.IOException;
import java.net.Socket;
import java.nio.charset.StandardCharsets;public class Main {public static void main(String[] args) {byte [] byte2= new byte[20];int i=1;String string="hello world";for(;i<3;i++){try {String str=string+i;byte2= string.getBytes(StandardCharsets.UTF_8);Socket socket =new Socket("127.0.0.1",8081);System.out.println(socket.getLocalAddress().getHostAddress()+" "+socket.getLocalPort());socket.setKeepAlive(true);System.out.println(str);socket.getOutputStream().write(byte2);Thread.sleep(10000);} catch (IOException | InterruptedException e) {e.printStackTrace();}}}
}