描述:
1.实现聊天窗口界面,定义一个聊天程序功能的启动类,实现两个程序并指定两个端口号,接着使用多线程实现聊天程序的接受与发生的同时进行
2.实现接收类并实现接口Runnable,在run()方法中编写接受信息的功能
3.实现发送类并实现接口Runnable,在run()方法中编写发送信息的功能
接受类:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ChatReceiver implements Runnable{
private DatagramSocket server;
public ChatReceiver(DatagramSocket server) {
this.server = server;
}
@Override
public void run() {
try {
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
while (true) {
server.receive(packet);//阻塞
String str = new String(packet.getData(), 0, packet.getLength());
System.out.println("收到" + packet.getAddress() + ":" +
packet.getPort() + "发送的信息" + str);
if (str.equals("-1"))break;
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("接受服务结束");
}
}
发送类:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
public class ChatSend implements Runnable{
private DatagramSocket client;
private int targetPort;
public ChatSend(DatagramSocket client, int targetPort) {
this.client = client;
this.targetPort = targetPort;
}
@Override
public void run() {
try (Scanner sc = new Scanner(System.in)) {
while (true) {
String data = sc.nextLine();
if (data.equals("1")) {
break;
}
byte[] bytes;
bytes = data.getBytes();
DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
InetAddress.getLocalHost(), targetPort);
client.send(packet);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("发送服务结束");
}
}
启动类:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Scanner;
public class ChatRoom {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入当前服务启动端口号:");
int serverPort = sc.nextInt();
System.out.println("请输入当前服务发送信息对象的端口号:");
int targetPort = sc.nextInt();
try {
DatagramSocket datagramSocket = new DatagramSocket(serverPort);
new Thread(new ChatReceiver(datagramSocket), "接受服务").start();
new Thread(new ChatSend(datagramSocket, targetPort), "发送服务").start();
} catch (IOException e) {
e.printStackTrace();
}
}
}