手记

UDP服务端多线程-----

/
线程处理类
/
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);

    }

}

}

0人推荐
随时随地看视频
慕课网APP

热门评论

不好意思,是我自己代码写错了!见笑了~

代码有问题啊,线程里响应的时候,packet.getAddress()方法得不到客户端地址,packet.getPort()方法也得不到端口号。

查看全部评论