利用Java中的datagrameSocket、datagramePocket和并行线程分别构建客户端和服务端实现UDP多人聊天,并显示信息发送者的呢称(或IP地址),信息发送时间,信息内容。
时间: 2023-06-24 14:08:13 浏览: 56
以下是一个简单的UDP多人聊天程序的Java实现,使用了datagramSocket和datagramPacket,并行线程来实现客户端和服务端的交互。
服务端代码:
```java
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
public static void main(String[] args) throws IOException {
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Received message from " + receivePacket.getAddress().getHostName()
+ " at " + System.currentTimeMillis() + ": " + message);
broadcast(message, serverSocket, receivePacket);
}
}
private static void broadcast(String message, DatagramSocket serverSocket, DatagramPacket receivePacket) throws IOException {
byte[] sendData = message.getBytes();
for (int i = 0; i < 10; i++) {
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, receivePacket.getAddress(), 9876 + i);
serverSocket.send(sendPacket);
}
}
}
```
客户端代码:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class UDPClient {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine();
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
while (true) {
System.out.print("Enter message: ");
String message = scanner.nextLine();
byte[] sendData = (name + ": " + message).getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String response = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Received response from " + receivePacket.getAddress().getHostName() + ": " + response);
}
}
}
```
这个程序支持多个客户端同时连接到服务端,并且会将接收到的每个客户端消息广播给所有连接的客户端。客户端需要输入自己的昵称,以便在广播消息时显示发送者的呢称。