Как определить, есть ли какой-либо входящий запрос в UDP-чате?

#java #sockets #networking #udp

#java #сокеты #сеть #udp

Вопрос:

Я новичок в программировании сокетов и сетях, поэтому, пожалуйста, помогите мне учиться.

Я создаю приложение UDP-чата, в котором узел может отправлять сообщения всем одноранговым узлам, подключенным к сети чата.

Как мне проверить, есть ли какой-либо входящий пакет? Если входящего пакета нет, я хотел бы отправить пакет, и если есть какой-либо входящий пакет, я получу его, а затем отправлю.

Спасибо за ваши предложения.

Ниже приведен код:

 while(true){        
     String sendsentence2 = inFromUser.readLine();
     String[] arg = sendsentence2.split(",");
     if(arg.length==3){
         System.out.println("File transfer initiated!!");
     }else{
         byte[] receiveData2 = new byte[40];
         byte[] sendData2 = new byte[40];
         sendData2 = sendsentence2.getBytes();
         DatagramPacket sendPacket2 = new DatagramPacket(sendData2, sendData2.length, BroadCastAddress, 9876);
         serverSocket.send(sendPacket2);
         DatagramPacket receivePacket2 = new DatagramPacket(receiveData2, receiveData2.length);
         serverSocket.receive(receivePacket2);
         String sentence2 = new String( receivePacket2.getData());                        
         InetAddress replyIPAddress = receivePacket2.getAddress();
         System.out.println("Received from "   replyIPAddress   " : "   sentence2);
     }
}
 

Таким образом, код ожидает ввода пользователем. Мне нужно развернуть один и тот же код на всех узлах, и если будет развернут один и тот же код, каждый узел сначала отправит пакет и не будет прослушивать другие узлы.

Комментарии:

1. Покажите свой код.

2. Отредактировал вопрос. Заранее спасибо @saurav

Ответ №1:

вы должны использовать многопоточное программирование для одновременного прослушивания сокета и отправки данных в сокет

Комментарии:

1. Да. Мне было интересно, есть ли какой-либо другой способ обойти это. Я создал приложение для чата как часть проекта колледжа, и мне было интересно, могу ли я улучшить его и все такое. Спасибо за устранение путаницы @AzhirAhmadi 🙂

2. вы можете использовать неблокирующий сокет