2017-04-01 122 views
0

有一個接收對等消息的代碼。同時接收和發送數據報

try { 
      DatagramSocket ds = new DatagramSocket(1050); 
      DatagramPacket pack = new DatagramPacket(new byte[1024], 1024); 
      while (true) { 
       AscMessage(); 
       ds.receive(pack); 
       System.out.println(new String(pack.getData())); 
      } 
     } 
      catch(Exception e){ 
     System.out.println(e); 
} 

有一個代碼發送一個點對點消息。

public void AscMessage(){ 
     System.out.print(">"); 
     final Scanner in = new Scanner (System.in); 
     String s1 = in.nextLine(); 
     this.sendMessage(s1); 
    } 

    public void sendMessage(String mes){ 

    try{ 

     byte[] data = mes.getBytes(); 

     InetAddress addr = InetAddress.getByName(host); 

     DatagramPacket pack = new DatagramPacket(data, data.length, addr, port); 

     DatagramSocket ds = new DatagramSocket(); 

     ds.send(pack); 

     ds.close(); 

    }catch(IOException e){ 

     System.err.println(e); 

    } 

} 

public static void main(String[] args){ 

    Sender sndr = new Sender("localhost", 1050); 

    while (true){ 
     sndr.AscMessage(); 
    } 
    for (int k = 0; k < args.length; k++) 
     sndr.sendMessage(args[k]); 

} 

它們如何組合?等待一條新消息,但同時發送。 是否有必要使用兩個端口?

回答

0

不,一個端口可以。您可以使用兩個線程,也可以使用Java 8的功能用select進行異步等待。