2017-04-01 155 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进行异步等待。