通过UDP协议建立聊天室,实现双人聊天功能。 定义线程ChatReceiver,监听输出接收到的内容 定义线程ChatSend,循环发送Scanner的内容 主线程初始化相关参数。
时间: 2024-05-01 19:18:55 浏览: 131
好的,这是一个基于UDP协议的双人聊天室的实现方法,需要定义线程ChatReceiver和ChatSend,以及主线程来初始化相关参数。具体实现如下:
```java
import java.io.IOException;
import java.net.*;
public class ChatRoom {
private static final int port = 8888; // 聊天室端口号
private static final int buffer_size = 1024; // 缓存区大小
private static InetAddress address; // 网络地址
private static DatagramSocket socket; // 套接字
public static void main(String[] args) {
try {
address = InetAddress.getByName("127.0.0.1"); // 本地主机地址
socket = new DatagramSocket(); // 创建套接字
new Thread(new ChatReceiver()).start(); // 启动消息接收线程
new Thread(new ChatSend()).start(); // 启动消息发送线程
} catch (IOException e) {
e.printStackTrace();
}
}
// 消息接收线程
static class ChatReceiver implements Runnable {
byte[] buffer = new byte[buffer_size];
@Override
public void run() {
try {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (true) {
socket.receive(packet); // 接收消息
String message = new String(packet.getData(), packet.getOffset(), packet.getLength());
System.out.println("收到消息:" + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 消息发送线程
static class ChatSend implements Runnable {
Scanner scanner = new Scanner(System.in);
@Override
public void run() {
while (true) {
String message = scanner.nextLine();
byte[] buffer = message.getBytes();
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
try {
socket.send(packet); // 发送消息
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
```
上述代码中,我们使用DatagramSocket和DatagramPacket类来实现UDP协议的双人聊天室。在主线程中,我们首先获取本地主机地址,然后创建一个DatagramSocket对象。接着,我们启动两个线程:一个是消息接收线程ChatReceiver,一个是消息发送线程ChatSend。
在消息接收线程中,我们使用DatagramPacket对象来接收消息,并将字节数组转换为字符串,最后输出收到的消息。
在消息发送线程中,我们使用Scanner对象来获取用户输入的消息,将其转换为字节数组,并使用DatagramPacket对象将其发送到目标地址。
需要注意的是,由于UDP协议是无连接的,因此在消息发送时需要指定目标地址和端口号。在本例中,我们只实现了双人聊天功能,因此目标地址为本地主机地址,端口号为8888。
希望这个回答对你有所帮助!
阅读全文