在 Java 中,Socket 主要用于网络通信,最常见的是基于 TCP 的 Socket 和 ServerSocket,以及基于 UDP 的 DatagramSocket。下面我用最常用、最基础的 TCP 示例给你讲清楚怎么用。
服务端负责监听端口、接收客户端连接。
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
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 msg = in.readLine();
System.out.println("收到客户端消息:" + msg);
out.println("你好,客户端!");
socket.close();
serverSocket.close();
}
}
客户端负责连接服务器、发送数据。
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
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);
socket.close();
}
}
✅ 先运行 Server,再运行 Client
socket.getInputStream(); // 接收数据
socket.getOutputStream(); // 发送数据
socket.getPort(); // 端口
socket.getInetAddress(); // IP
socket.close(); // 关闭
serverSocket.accept(); // 等待客户端连接
serverSocket.close();
UDP 是无连接、不可靠但快。
// 发送端
DatagramSocket socket = new DatagramSocket();
byte[] data = "hello".getBytes();
DatagramPacket packet = new DatagramPacket(
data, data.length, InetAddress.getLocalHost(), 9999);
socket.send(packet);
// 接收端
DatagramSocket socket = new DatagramSocket(9999);
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
java.net.BindException: Address already in use
✅ 换端口 / 关掉占用程序
Connection refused
✅ 检查:
如果你愿意,我可以:
你想学哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。