1. 程式人生 > 其它 >網路程式設計:11(UDP多執行緒線上諮詢)

網路程式設計: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();


      }
    }