网络编程:11(UDP多线程在线咨询)

网络编程:11

  • UDP多线程在线咨询

    • 见代码;

  • 代码案例:接收方


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


    /**
    * 发送方:
    */
    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 (Exception e) {
               e.printStackTrace();
          }


      }

       @Override
       public void run() {
           while(true){
               String data= null;
               try {
                   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 (IOException e) {
                   e.printStackTrace();
              }

          }

           socket.close();
      }
    }

  • 代码案例:接收方


    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 String msgFrom;

       private int port;

       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);//阻塞式接收包裹

                   //断开连接
                   byte[] data = packet.getData();
                   String receivedData=new String(data,0,data.length);

                   System.out.println(msgFrom+":"+receivedData);
                   if(receivedData.equals("bye")){
                       break;
                  }
              } catch (IOException e) {
                   e.printStackTrace();
              }

          }

      }
    }
  • 代码案例:交互者

    //TalkStudent
    public class TalkStudent {

       public static void main(String[] args) {

           //开启2个线程
           new Thread(new TalkSend(7777,"localhost",9999)).start();
           new Thread(new TalkReceive(8888,"老师")).start();


      }
    }



    //TeacherTalk
    public class TeacherTalk {
       public static void main(String[] args) {

           //开启2个线程
           new Thread(new TalkSend(5555,"localhost",8888)).start();
           new Thread(new TalkReceive(9999,"学生")).start();


      }
    }

 

 

 

 

 

 

 

posted @   gzs1024  阅读(146)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示