java用UDP作简易聊天室

-------------------------------------------------java用UDP作简易聊天室----------------------------------------------------

/**

 * 服务端

 * @author李昆鹏

 *

 */

       

public   class UDPServer implements Runnable{

 

    //指定端口

    private  int  port;

   

    public  int getPort() {

        return  port;

    }

 

    public  void setPort(intport) {

        this.port = port;

    }

 

    public UDPServer(int  port) {

        super();

        this.port = port;

    }

 

    @Override

    public  void run() {

        DatagramSocket ds = null;

       

        try {

           //创建UDP服务端的对象,必须指定端口

           //端口最好指定在一万以上,因为八千之前的端口很多都被占用了

           ds = new  DatagramSocket(port);

          

           //定义接收的字节数组

           byte[] bs = new  byte[1024];

           System.out.println("服务器已经启动");

          

           while(true) {

               //定义接收数据包

               DatagramPacket dp = new DatagramPacket(bs, bs.length);

               //数据包的接收

               ds.receive(dp);

              

               //获得发生端的IP

               InetAddress ia = dp.getAddress();

              

               //获得数据包中的数据,这个数组的长度是我们自己定义的长度(1024

               byte[] bs1 = dp.getData();

               //或得接收数据的长度(实际接收到数据的长度)

               int  len = dp.getLength();

              

               //组装接收到的数据

               String data = new String(bs1,0,len);

               //退出程序

               if("exit".equals(data)) {

                   System.out.println("服务端已退出");

                   break;

               }

               System.out.println(ia.getHostAddress()+":\r\n"+data);

           }

          

        } catch (Exception e) {

           e.printStackTrace();

        }   finally {

           //关闭服务端

           if(ds != null)

           ds.close();

        }

    }

   

}

-----------------------------------------------

/**

 * 客服端

 * @author李昆鹏

 *

 */

public  class UDPClient implements Runnable {

 

    //发送目标的IP

    private String ip;

   

    public UDPClient(String ip, int  port) {

        super();

        this.ip = ip;

        this.port = port;

    }

 

 

    //发送端口

    private  int  port;

   

   

    @Override

    public  void run() {

        DatagramSocket ds = null;

        BufferedReader br = null;

        try {

           //创建控制台的输入流对象

           br = new BufferedReader(new InputStreamReader(System.in));

           //创建客服端端接收对象

           ds = new  DatagramSocket();

           System.out.println("已经接入" + ip);

           while (true) {

               System.out.println("请输入你要发送的内容:");

               //读取控制台输入的数据并且转换成字节数组

               byte[] bs = br.readLine().getBytes();

              

               //创建要发送的目的地的IP对象

               InetAddress ia = InetAddress.getByName(ip);

              

               //指定数据包

               //第一个参数是打包的字节数组,第二个参数是要打包的字节长度

               //第三个参数是要发送的IP对象,第四个参数是要发送的服务端

               DatagramPacket dp = new DatagramPacket(bs, bs.length,ia,port);

               //发送

               ds.send(dp);

               System.out.println("我说:\r\n" + new String(bs,0,bs.length));

               //退出程序

               if("exit".equals(new String(bs,0,bs.length))) {

                   System.out.println("客服端已退出");

                   break;

               }

           }    

        } catch (Exception e) {

           e.printStackTrace();

        } finally {

           if(ds != null)

               ds.close();

               try {

                   if( br != null)

                   br.close();

               } catch (IOException e) {

                   e.printStackTrace();

               }

        }

    }

}

-----------------------------------------------------------

/**

 * 聊天室

 * @author李昆鹏

 *

 */

public  class ChatRoom {

 

    public  static  void main(String[] args) {

        //创建接收端对象的线程的实现

        UDPClient uc = new UDPClient("192.168.1.104", 10000);

        //创建服务端

        UDPServer us = new   UDPServer(10001);

       

        //发送端的线程

        Thread t = new Thread(uc);

        //接收端的线程     

        Thread t1 = new Thread(us);

       

        //启动线程

        t.start();

        t1.start();

    }

   

}

猜你喜欢

转载自blog.csdn.net/weixin_41547486/article/details/80028719