同时接收和发送数据报
Simultaneous reception and sending of datagrams
有一个代码可以接收点对点消息。
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]);
}
它们如何组合?等待新消息,但同时发送。
是否需要使用两个端口?
不是,一个端口就可以。您要么使用两个线程,要么使用 Java 8 的特性来使用 select.
进行异步等待
有一个代码可以接收点对点消息。
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]);
}
它们如何组合?等待新消息,但同时发送。 是否需要使用两个端口?
不是,一个端口就可以。您要么使用两个线程,要么使用 Java 8 的特性来使用 select.
进行异步等待