• UDP多线程在线咨询


    UDP多线程在线咨询

    TalkSend

    import java.io.BufferedReader;
    import java.io.IOException;
    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) throws SocketException {
            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();
            }
    
        }
    }
    
    

    TalkReceive

    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    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 (SocketException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
            while(true){
                try {
                    //准备接收包裹
                    byte[] container=new byte[1024];
                    DatagramPacket packet=new DatagramPacket(container,0,container.length);
                    socket.receive(packet);//阻塞接收包裹
    
                    //断开连接  bye
                    byte[] data=packet.getData();
                    String receiveData=new String(data,0,data.length);
    
                    System.out.println(msgFrom+":"+receiveData);
                    if(receiveData.equals("bye")){
                        break;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
    
            socket.close();
        }
    }
    
    

    TalkStudent

    import java.net.SocketException;
    
    public class TalkStudent {
        public static void main(String[] args) {
            new Thread(new TalkSend(7777,"localhost",9999)).start();
            new Thread(new TalkReceive(8888,"老师"));
        }
    }
    
    

    TalkTeacher

    import java.net.SocketException;
    
    public class TalkTeacher {
        public static void main(String[] args){
            new Thread(new TalkSend(5555,"localhost",8888)).start();
            new Thread(new TalkReceive(9999,"学生"));
        }
    }
    
    
  • 相关阅读:
    List of 3rd Party .NET UI & Reporting Components
    cannot open window service on computer '.' in window application
    CentOS7重新生成 /boot/grub2/grub.cfg
    vmware esxi 查看网卡、Raid卡驱动
    libcmt.lib和msvcrt.lib冲突,原因和解决方法
    C/C++注释规范
    lsof命令查看端口关联的文件
    linux下查看磁盘分区的文件系统格式
    编译linux kernel及制作initrd ( by quqi99 )
    三种虚拟化技术比较
  • 原文地址:https://www.cnblogs.com/fyhjy/p/14400968.html
Copyright © 2020-2023  润新知