/
线程处理类
/
public class UDPServerThread extends Thread {
DatagramSocket socket = null;
DatagramPacket packet = null;
public UDPServerThread(DatagramSocket socket, DatagramPacket packet) {
this.socket = socket;
this.packet = packet;
}
public void run() {
try {
byte[] data = packet.getData();
// 4、读取数据
String info = new String(data, 0, packet.getLength());
System.out.println("我是服务端,客户端说:" + info);
/*
* 向客户端响应数据
*/
// 1、定义客户端的地址、端口号、数据
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "欢迎您!".getBytes();
// 2、创建数据报,包含响应的数据信息
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
socket.send(packet2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/
服务端主函数
/
public class UDPServer {
public static void main(String[] args) throws IOException {
/*
* 接收客户端信息
*/
// 1、创建服务器端DatagramSocket,指定端口
DatagramSocket socket = new DatagramSocket(8800);
System.out.println("****服务器端已启动,等待客户端发送数据****");
int count = 0;
while (true) {
// 2、创建数据报,用于接收客户端发送的数据报
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
// 3、接收客户端发送的数据(此方法在接受到数据报之前会一直阻塞)
socket.receive(packet);
UDPServerThread serverThread = new UDPServerThread(socket, packet);
serverThread.start();
count++;
System.out.println("目前客户端连接数:"+count);
}
}
}
热门评论
不好意思,是我自己代码写错了!见笑了~
代码有问题啊,线程里响应的时候,packet.getAddress()方法得不到客户端地址,packet.getPort()方法也得不到端口号。