问答详情
源自:5-1 Socket 总结

UDP实现多线程

UDP实现多线程时,发生了错误(while怎么设置停止语句,要不然内存会一直飙升)。谁有编写好的UDP多线程程序?

提问者:小波66 2016-10-04 11:09

个回答

  • qq_森旅迷了鹿_0
    2016-11-21 17:56:12

    package UDPTest;


    import java.io.IOException;

    import java.net.DatagramPacket;

    import java.net.DatagramSocket;

    import java.net.InetAddress;


    /**

     * 服务器端,实现基于UDP的用户登录

     * 

     * @author admin

     * 

     */

    public class UDPService {

    public static void main(String[] args) throws IOException {


    /*

    * 接受客户端发送的数据

    */

    // 创建服务器端DatagramSocket,并指定端口

    DatagramSocket socket = new DatagramSocket(8800);

    System.out.println("---服务器即将启动,等待客户端连接---");

    // 创建数据报,用于接受客户端发送的数据

    // 创建字节数组,用于指定接受的数据包的大小

    int count = 0;

    while (true) {

    byte[] data = new byte[1024];

    DatagramPacket packet = new DatagramPacket(data, data.length);

    // 接受客户端发送的数据,此方法在接受数据报之前会一直堵塞

    socket.receive(packet);

    // 创建一个多线程

    UDPThread thread = new UDPThread(packet, socket);

    // 线程开始

    thread.start();

    count++;

    System.out.println("当前客户端的数量为:" + count);

    // 查看连接的客户端的地址

    System.out.println("当前客户端的地址为:" + packet.getAddress());

    }

    }

    }


  • 慕粉15902996076
    2016-10-04 17:30:30

    package com.imooc;


    import java.io.IOException;

    import java.net.DatagramPacket;

    import java.net.DatagramSocket;

    import java.net.InetAddress;


    public class UDPServerThread extends Thread{

    DatagramPacket packet;

    DatagramSocket socket;

    public UDPServerThread(DatagramPacket packet, DatagramSocket socket) {

    super();

    this.packet = packet;

    this.socket = socket;

    }

    public void run(){

    //读取数据

    byte[] data=packet.getData();

    String inf=new String(data,0,packet.getLength());

    System.out.println("我是服务器,客户端说:"+inf);

    /*

    * 与客户端响应

    */

    InetAddress address=packet.getAddress();

    int port =packet.getPort();

    byte[] data2="欢迎您".getBytes();

    //创建数据报

    DatagramPacket packet2=new DatagramPacket(data2, data2.length, address, port);

    try {

    socket.send(packet2);

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }