请用java来写一个具体的代码示例 通过UDP协议建立聊天室,实现双人聊天功能。 定义线程ChatReceiver并独立建立一个类,监听输出接收到的内容 定义线程ChatSend并独立建立一个类,循环发送Scanner的内容
时间: 2024-05-08 11:18:22 浏览: 8
好的,以下是一个可能的Java代码示例,可以通过UDP协议建立聊天室,实现双人聊天功能:
```java
import java.io.IOException;
import java.net.*;
public class ChatRoom {
public static void main(String[] args) {
// 定义服务器和客户端的端口号
int serverPort = 12345;
int clientPort = 23456;
// 创建服务器socket并监听
try (DatagramSocket serverSocket = new DatagramSocket(serverPort)) {
System.out.println("服务器已经启动,等待客户端连接...");
// 定义线程ChatReceiver并独立建立一个类,监听输出接收到的内容
Thread receiver = new Thread(new ChatReceiver(serverSocket));
receiver.start();
// 创建客户端socket并发送消息
try (DatagramSocket clientSocket = new DatagramSocket()) {
System.out.println("客户端已经连接上服务器...");
// 定义线程ChatSend并独立建立一个类,循环发送Scanner的内容
Thread sender = new Thread(new ChatSend(clientSocket, clientPort));
sender.start();
// 等待线程结束
receiver.join();
sender.join();
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
// ChatReceiver类,监听并输出接收到的内容
static class ChatReceiver implements Runnable {
private DatagramSocket socket;
public ChatReceiver(DatagramSocket socket) {
this.socket = socket;
}
@Override
public void run() {
while (true) {
try {
// 接收消息
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String message = new String(packet.getData()).trim();
// 输出消息
System.out.println("对方说:" + message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// ChatSend类,循环发送Scanner的内容
static class ChatSend implements Runnable {
private DatagramSocket socket;
private int port;
public ChatSend(DatagramSocket socket, int port) {
this.socket = socket;
this.port = port;
}
@Override
public void run() {
try (Scanner scanner = new Scanner(System.in)) {
while (true) {
// 读入消息
String message = scanner.nextLine();
// 发送消息
byte[] buffer = message.getBytes();
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
socket.send(packet);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
以上代码演示了如何通过UDP协议建立聊天室,实现双人聊天功能。具体实现方式如下:
1. 定义服务器和客户端的端口号;
2. 创建服务器socket并监听,等待客户端的连接;
3. 定义一个线程ChatReceiver,独立建立一个类,监听输出接收到的内容;
4. 创建客户端socket并发送消息;
5. 定义一个线程ChatSend,独立建立一个类,循环发送Scanner的内容;
6. 等待线程结束,退出程序。
可以注意到,ChatReceiver和ChatSend都实现了Runnable接口,可以作为线程来执行。ChatReceiver监听服务器socket的消息,接收并输出。ChatSend则使用客户端socket,读入Scanner中的消息,然后发送给服务器。通过这样双方不断收发消息,就可以实现聊天室了。