import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UdpReceiver extends Thread {
//接收客户端消息的线程
private DatagramSocket datagramSocket;
private int port;
public UdpReceiver(DatagramSocket datagramSocket,int port){
this.datagramSocket = datagramSocket;
this.port = port;
}
@Override
public void run() {
this.udpReceive();
}
//实现接收信息
public void udpReceive(){
//创建服务端接收数据的DatagramSocket 对象
try {
datagramSocket = new DatagramSocket(this.port);
//创建数据缓存区
byte [] bytes = new byte[1024];
//创建数据报包对象
UdpChatRoom.dp = new DatagramPacket(bytes,bytes.length);
//等待接收客户端所发送的数据
try {
synchronized (UdpChatRoom.dp){
datagramSocket.receive(UdpChatRoom.dp);
//唤醒线程
UdpChatRoom.dp.notifyAll();
String str = new String(UdpChatRoom.dp.getData(),0,UdpChatRoom.dp.getLength());
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}
public class UdpSend extends Thread {
//向客户端发送消息的线程
private DatagramPacket datagramPacket;
private DatagramSocket datagramSocket;
private String destIp;//目标IP地址
private int desPort;//目标端口
private Scanner scanner;
public UdpSend(DatagramSocket datagramSocket, DatagramPacket datagramPacket, String destIp, int desPort, Scanner scanner) {
this.datagramSocket = datagramSocket;
this.datagramPacket = datagramPacket;
this.destIp = destIp;
this.desPort = desPort;
this.scanner = scanner;
}
@Override
public void run() {
this.sendMsg();
}
//向客户端发送消息
public void sendMsg() {
while (true) {
//消息需要进行转换转换成字符数组
scanner = new Scanner(System.in);
String sendMsg = scanner.nextLine();
byte[] bytes = sendMsg.getBytes();
//创建数据报包装对象DatagramPacket
this.datagramPacket = new DatagramPacket(bytes, bytes.length, new InetSocketAddress(this.destIp, this.desPort));
//将数据包放入公共数据区
UdpChatRoom.dp = datagramPacket;
//创建数据发送对象DatagramSocket,需要指定消息的发送端口
try {
this.datagramSocket = new DatagramSocket(8888);
synchronized (datagramPacket){
//让发送消息的线程处于等待状态
datagramPacket.wait();
//从公共数据区取出包发送给客户端
this.datagramSocket.send(UdpChatRoom.dp);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
if (datagramSocket != null) {
datagramSocket.close();
}
if (datagramPacket != null) {
datagramSocket.close();
}
if (scanner != null) {
scanner.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.Scanner;
public class UdpChatRoom {
//udp一对多聊天室
//存放公共的信息
public static DatagramPacket dp;
public static void main(String[] args) {
try {
DatagramSocket datagramSocket = new DatagramSocket(8888);
new UdpReceiver(datagramSocket,9999).start();
new UdpSend(datagramSocket,UdpChatRoom.dp,"127.0.0.1",8888,new Scanner(System.in)).start();
} catch (SocketException e) {
e.printStackTrace();
}
}
}
老师这是我用udp写的哪个多人聊天,看看哪里有错误