UDP简单实现信息的接收与传递(模拟聊天功能)

////简单实现循环接收消息(更新)

package com.cl.chat;


////简单实现循环接收消息
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpReceiveDemo01 {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(6666);




        while (true) {
            //准备接收字节
            byte[] data = new byte[1024];
            DatagramPacket packet = new DatagramPacket(data, 0, data.length);
            socket.receive(packet);//阻塞时接收


            byte[] data1 = packet.getData();
            String receiveData = new String(data1, 0, data1.length);

            System.out.println(receiveData);

            if (receiveData.equals("bye")) {   //断开连接
                break;
            }
        }
            socket.close();

    }
}

 

////简单实现循环接收消息

package com.cl.chat;


////简单实现循环接收消息
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpReceiveDemo01 {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(6666);




        while (true) {
            //准备接收字节
            byte[] data = new byte[1024];
            DatagramPacket packet = new DatagramPacket(data, 0, data.length);
            socket.receive(packet);//阻塞时接收


            byte[] data1 = packet.getData();
            String receiveData = new String(data1, 0, data1.length);

            System.out.println(receiveData);

            if (receiveData.equals("bye")) {   //断开连接
                break;
            }
        }
            socket.close();

    }
}

 

多线程实现多人聊天功能

package com.cl.chat;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TalkSend implements Runnable {
    DatagramSocket socket=null;
    BufferedReader reader=null;

    private int fromPort;
    private String toIP;
    private int toPort;

    public  TalkSend(int fromPort,String toIP,int toPort){
      this.fromPort=fromPort;
      this.toIP=toIP;
      this.toPort=toPort;

      try{
          socket = new DatagramSocket(fromPort);
          reader=new BufferedReader(new InputStreamReader(System.in));


      }catch (SocketException e) {
          e.printStackTrace();
      } {


        }

    }


    @Override
    public void run() {

        while(true){
            try{
                String data=reader.readLine();
                byte[] datas = data.getBytes();
                DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIP,this.toPort));

                socket.send(packet);
                if (data.equals("bye")){
                    break;
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }


        socket.close();

    }
}

package com.cl.chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class TalkReceive implements Runnable{

    DatagramSocket socket=null;
    private int port;
    private String msgfrom;

    public TalkReceive(int port,String msgfrom){
        this.port=port;
        this.msgfrom=msgfrom;
        try{
            socket=new DatagramSocket(port);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {

        while (true) {
            try{
                //准备接收字节
                byte[] data = new byte[1024];
                DatagramPacket packet = new DatagramPacket(data, 0, data.length);
                socket.receive(packet);//阻塞时接收


                byte[] data1 = packet.getData();
                String receiveData = new String(data1, 0, data1.length);

                System.out.println(msgfrom+":"+receiveData);

                if (receiveData.equals("bye")) {   //断开连接
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        socket.close();

    }
}


//用户student||teacher

//student
package com.cl.chat;

public class TalkStudent {
    public static void main(String[] args) {
        //开启两个线程
        new Thread(new TalkSend(7777,"localhost",9999)).start();
        new Thread(new TalkReceive(8888,"老师")).start();

    }
}



///teacher
package com.cl.chat;

public class TalkTeacher {
    public static void main(String[] args) {
        new Thread(new TalkSend(5555,"localhost",8888)).start();
        new Thread(new TalkReceive(9999,"学生")).start();
    }
}

 

posted @ 2020-09-10 10:46  凸然猿  阅读(476)  评论(0编辑  收藏  举报