java实现tcp通信核心在于serversocket与socket类,通过多线程可支持并发连接。1. tcp是面向连接、可靠传输,适用于网页浏览等场景;udp无连接、速度快,适合视频会议等实时性要求高的场景。2. 服务端使用serversocket监听端口并接受连接,客户端使用socket发起连接,双方通过输入输出流通信。3. 多线程处理多个客户端时,每当有新连接,服务端创建新线程独立处理该连接。4. 注意事项包括避免端口冲突、处理输入流为空、统一字符编码、及时关闭资源以防止内存泄漏。掌握这些基础流程后,可进一步扩展功能如协议解析、心跳机制等。

Java 实现网络编程主要依赖于 java.net 包中的类,其中最常用的就是基于 TCP 和 UDP 的 Socket 编程。想要实现两个设备之间的通信,Socket 是基础也是核心。

在开始写代码之前,先了解下 TCP 和 UDP 的基本区别:

选择哪种方式取决于你的应用场景。本文以 TCP 为例讲解 Socket 通信的实现。
立即学习“Java免费学习笔记(深入)”;
Java 中通过 ServerSocket 表示服务器端,Socket 表示客户端,两者配合完成通信。

import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888)) {
System.out.println("服务器已启动,等待连接...");
Socket socket = serverSocket.accept(); // 阻塞等待客户端连接
System.out.println("客户端已连接");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("收到消息:" + inputLine);
out.println("服务器回应:" + inputLine); // 回应客户端
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8888)) {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("服务器回复:" + in.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}这段代码实现了最基本的一问一答式通信,你可以在此基础上扩展成多线程处理多个客户端。
一个常见的需求是服务器能同时处理多个客户端请求。这时就需要为每个连接创建一个线程。
public class MultiThreadTCPServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888)) {
System.out.println("服务器已启动,等待连接...");
while (true) {
Socket socket = serverSocket.accept();
new ClientHandler(socket).start(); // 每个客户端连接开启一个线程
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ClientHandler extends Thread {
private Socket socket;
public ClientHandler(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("收到消息:" + inputLine);
out.println("你发送的是:" + inputLine);
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}这样就可以让服务器支持多个客户端并发访问了。
Socket、输入输出流,否则容易造成内存泄漏。基本上就这些。Socket 编程虽然不算复杂,但细节很多,尤其是涉及并发、异常处理时更容易出错。只要掌握基本流程,后续可以根据实际需求扩展功能,比如加入协议解析、心跳机制等。
以上就是Java怎样实现网络编程?Socket通信实例解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号