结合多线程和基于UDP协议的Socket编程,实现客户端发送字符串(内容不限)给服务器端,第1次发送时,即注册到服务器端。 (1.2) 客户端开启一个单独线程,接收服务器端发过来的数据,并打印在控制台请使用java语言
时间: 2024-05-10 13:20:34 浏览: 4
客户端代码:
```java
import java.io.IOException;
import java.net.*;
public class Client {
private static final int SERVER_PORT = 8888;
private static final int BUFFER_SIZE = 1024;
private static final String SERVER_IP = "127.0.0.1";
public static void main(String[] args) throws IOException {
DatagramSocket clientSocket = new DatagramSocket();
InetAddress serverAddress = InetAddress.getByName(SERVER_IP);
// 发送注册信息
String registerMsg = "register";
byte[] sendData = registerMsg.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, SERVER_PORT);
clientSocket.send(sendPacket);
// 单独开启一个线程接收服务器端发过来的数据
Thread receiveThread = new Thread(() -> {
byte[] receiveData = new byte[BUFFER_SIZE];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
while (true) {
try {
clientSocket.receive(receivePacket);
String receivedMsg = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Received from server: " + receivedMsg);
} catch (IOException e) {
e.printStackTrace();
}
}
});
receiveThread.start();
// 循环发送字符串
while (true) {
byte[] sendBuffer = new byte[BUFFER_SIZE];
String sendMsg = "Hello, server!";
sendBuffer = sendMsg.getBytes();
DatagramPacket sendPacket1 = new DatagramPacket(sendBuffer, sendBuffer.length, serverAddress, SERVER_PORT);
clientSocket.send(sendPacket1);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
服务器端代码:
```java
import java.io.IOException;
import java.net.*;
public class Server {
private static final int SERVER_PORT = 8888;
private static final int BUFFER_SIZE = 1024;
public static void main(String[] args) throws IOException {
DatagramSocket serverSocket = new DatagramSocket(SERVER_PORT);
byte[] receiveData = new byte[BUFFER_SIZE];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
while (true) {
serverSocket.receive(receivePacket);
String receivedMsg = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Received from client: " + receivedMsg);
// 如果是第一次发送,则向客户端发送确认信息
if (receivedMsg.equals("register")) {
InetAddress clientAddress = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
String confirmMsg = "Confirm registration";
byte[] sendData = confirmMsg.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);
serverSocket.send(sendPacket);
}
}
}
}
```