我写的跟“风中过客”差不多,出了点小问题,弄不明白,请老师指教public static class UDPThread extends Thread{
DatagramSocket socket=null;
DatagramPacket packet=null;
public UDPThread(DatagramSocket socket, DatagramPacket packet) {
super();
this.socket = socket;
this.packet = packet;
}
public void run(){
byte[] data = packet.getData();
String info = new String(data,0,packet.getLength());
System.out.println("我是服务器,客户端说:"+info);
//响应客户端
byte[] data2 = "欢迎您!".getBytes();
InetAddress address = packet.getAddress();
int port = packet.getPort();
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
try {
socket.send(packet2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上面没什么问题,下面的main方法出问题了public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8800);
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
System.out.println("******服务器已经启动******");
int count = 0;
while(true){
socket.receive(packet);
UDPThread udpThread = new UDPThread(socket, packet);
udpThread.start();
count++;
System.out.println("客户端数量为:"+count);
}
}
我把
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
放在循环外面
运行时不报错,但客户端发送请求后,第一次得不到回应,发送第二次请求后,得到第一次的回应
但服务端不显示接收到的内容
我学“风中过客”把这两句放循环里 就正常了
请问为什么?