java如何开tcp
TCP 通信实现方法
Java 提供了 java.net.Socket 和 java.net.ServerSocket 类用于 TCP 通信。以下是客户端和服务端的实现示例。
服务端代码
服务端通过 ServerSocket 监听指定端口,接受客户端连接后通过 Socket 进行通信。
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException {
int port = 8080;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server started on port " + port);
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getInetAddress());
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String message = in.readLine();
System.out.println("Received: " + message);
out.println("Server response: " + message);
in.close();
out.close();
clientSocket.close();
serverSocket.close();
}
}
客户端代码
客户端通过 Socket 连接到服务端,发送数据并接收响应。
import java.io.*;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException {
String host = "localhost";
int port = 8080;
Socket socket = new Socket(host, port);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("Hello from client");
String response = in.readLine();
System.out.println("Server response: " + response);
out.close();
in.close();
socket.close();
}
}
多线程服务端
为支持多客户端连接,服务端可使用多线程处理每个客户端请求。

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class MultiThreadedServer {
public static void main(String[] args) throws IOException {
int port = 8080;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server started on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
new Thread(new ClientHandler(clientSocket)).start();
}
}
static class ClientHandler implements Runnable {
private final Socket clientSocket;
ClientHandler(Socket socket) {
this.clientSocket = socket;
}
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String message = in.readLine();
System.out.println("Received from " + clientSocket.getInetAddress() + ": " + message);
out.println("Server response: " + message);
in.close();
out.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
注意事项
- 端口选择需避免系统保留端口(通常 0-1023)。
- 通信结束后需关闭所有流和套接字以释放资源。
- 异常处理需完善,避免程序因网络问题崩溃。
- 多线程环境下需注意线程安全问题。






