在 Java 中,Socket 通信通常分为 服务端(ServerSocket) 和 客户端(Socket) 两部分。下面给你一个最基础、可直接运行的示例,以及关键说明。
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888)) {
System.out.println("服务器启动,等待客户端连接...");
Socket socket = serverSocket.accept(); // 阻塞等待
System.out.println("客户端已连接:" + socket.getInetAddress());
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(
socket.getOutputStream(), true);
String msg = in.readLine();
System.out.println("收到客户端消息:" + msg);
out.println("你好,客户端!");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8888)) {
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(
socket.getOutputStream(), true);
out.println("你好,服务器!");
String response = in.readLine();
System.out.println("服务器回复:" + response);
} catch (IOException e) {
e.printStackTrace();
}
}
}
| 类 | 作用 |
|---|---|
ServerSocket |
服务端监听端口 |
Socket |
客户端连接 / 服务端接收连接 |
InputStream |
接收数据 |
OutputStream |
发送数据 |
BufferedReader |
按行读取文本 |
PrintWriter |
发送文本 |
✅ 端口范围:1024–65535
✅ 异常处理:网络代码必须处理 IOException
✅ 资源关闭:用 try-with-resources 自动关闭
✅ 中文乱码:可指定编码
new InputStreamReader(socket.getInputStream(), "UTF-8")
Selector)如果你有具体场景(比如聊天室、游戏、设备通信),我可以给你更合适的实现方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。