☰分类导航

Java 编程/网络编程
课程进度 85% · 第9/10章第9/10章 · 标签 1/2
— 1 —

TCP 通信

Socket 是实现网络通信的基础。Java 提供了 ServerSocket 和 Socket 类简化 TCP 编程。


```java
// 服务器
ServerSocket server = new ServerSocket(8080);
System.out.println("等待客户端连接...");

Socket client = server.accept();
BufferedReader in = new BufferedReader(
    new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(
    client.getOutputStream(), true);

String msg = in.readLine();
System.out.println("收到: " + msg);
out.println("已收到: " + msg);

client.close();
server.close();

// 客户端
Socket socket = new Socket("localhost", 8080);
PrintWriter out = new PrintWriter(
    socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
    new InputStreamReader(socket.getInputStream()));

out.println("Hello Server");
System.out.println(in.readLine());

socket.close();
```
java
1
// 服务器
2
ServerSocket server = new ServerSocket(8080);
3
System.out.println("等待客户端连接...");
4
 
5
Socket client = server.accept();
6
BufferedReader in = new BufferedReader(
7
new InputStreamReader(client.getInputStream()));
8
PrintWriter out = new PrintWriter(
9
client.getOutputStream(), true);
10
 
11
String msg = in.readLine();
12
System.out.println("收到: " + msg);
13
out.println("已收到: " + msg);
14
 
15
client.close();
16
server.close();
17
 
18
// 客户端
19
Socket socket = new Socket("localhost", 8080);
20
PrintWriter out = new PrintWriter(
21
socket.getOutputStream(), true);
22
BufferedReader in = new BufferedReader(
23
new InputStreamReader(socket.getInputStream()));
24
 
25
out.println("Hello Server");
26
System.out.println(in.readLine());
27
 
28
socket.close();
— 2 —

UDP 通信


```java
// UDP 服务器
DatagramSocket server = new DatagramSocket(9090);
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
server.receive(packet);
String msg = new String(packet.getData(), 0, packet.getLength());
System.out.println("收到: " + msg);

InetAddress addr = packet.getAddress();
int port = packet.getPort();
byte[] resp = "ACK".getBytes();
server.send(new DatagramPacket(resp, resp.length, addr, port));
server.close();

// UDP 客户端
DatagramSocket client = new DatagramSocket();
byte[] data = "Hello".getBytes();
client.send(new DatagramPacket(data, data.length,
    InetAddress.getByName("localhost"), 9090));

byte[] buf2 = new byte[1024];
DatagramPacket resp2 = new DatagramPacket(buf2, buf2.length);
client.receive(resp2);
System.out.println(new String(resp2.getData(), 0, resp2.getLength()));
client.close();
```
java
1
// UDP 服务器
2
DatagramSocket server = new DatagramSocket(9090);
3
byte[] buf = new byte[1024];
4
DatagramPacket packet = new DatagramPacket(buf, buf.length);
5
server.receive(packet);
6
String msg = new String(packet.getData(), 0, packet.getLength());
7
System.out.println("收到: " + msg);
8
 
9
InetAddress addr = packet.getAddress();
10
int port = packet.getPort();
11
byte[] resp = "ACK".getBytes();
12
server.send(new DatagramPacket(resp, resp.length, addr, port));
13
server.close();
14
 
15
// UDP 客户端
16
DatagramSocket client = new DatagramSocket();
17
byte[] data = "Hello".getBytes();
18
client.send(new DatagramPacket(data, data.length,
19
InetAddress.getByName("localhost"), 9090));
20
 
21
byte[] buf2 = new byte[1024];
22
DatagramPacket resp2 = new DatagramPacket(buf2, buf2.length);
23
client.receive(resp2);
24
System.out.println(new String(resp2.getData(), 0, resp2.getLength()));
25
client.close();