2013-08-13 2 views
0

все. У меня вопрос о использовании сокетов. Это кажется довольно простым, хотя, но я не в состоянии управлять им. Поэтому возникает вопрос: могу ли я использовать только один сокет для отправки пакетов данных нескольким клиентам?UDP несколько гнездо

ds1 = new DatagramSocket(); 
dp1 = new DatagramPacket(packet, packet.length, InetAddress.getByName(address1), port); 
dpto2 = new DatagramPacket(packet, packet.length, InetAddress.getByName(address2), port); 
dpto3 = new DatagramPacket(packet, packet.length, InetAddress.getByName(address3), port);** 

Адрес1, адрес2 и адрес3 здесь разные. Я хочу подключиться к нескольким клиентам в одном прогоне программы и отправлять им пакеты UDP. Я еще не тестировал его, просто хочу получить некоторые предложения о том, как это сделать.

Любая помощь будет оценена ...

+0

Тот же пакет для нескольких клиентов (трансляция) или разные датаграммы для каждого клиента? – SJuan76

+0

Те же пакеты для нескольких адресатов – daniyar

ответ

2
  1. Вы не подключиться к клиентам с UDP, UDP не требует соединения. Если вам действительно нужна концепция подключения, вам нужно переключиться на TCP (но во многих случаях вам это действительно не нужно).
  2. Да, вы можете отправить данные для нескольких клиентов, используя один DatagramSocket
+0

@fvi, когда я создаю пакет дейтаграммы, я указываю поле IP-адреса, поэтому пакеты отправляются на все IP-адреса. Есть ли способ перечислить ip-адреса в интерфейсе командной строки (в качестве аргументов для запуска) и создать пакет автоматически для каждого введенного адреса ??? – daniyar

0

Я думаю, если бы я понял вопрос, если данные для отправки является одинаковым для всех клиентов, то нет никакой необходимости создавать отдельные пакеты для каждый клиент, просто создать один пакет и изменить свой адрес (и порт, если это необходимо) то, как это будет делать:

/** 
* Send a DatagramPacket to all addresses in hosts. 
* @param socket 
* A created DatagramSocket 
* @param hosts 
* Array of strings containing the hosts to send the packet, 
* each one can be either a host name or a dotted IP address. 
* @param port 
* The port the clients are listening 
* @param data 
* Data to send 
* @return 
* Number of packets sent. 
*/ 
int sendPackets(DatagramSocket socket, String[] hosts, int port, byte[] data) 
{ 
    if (hosts.length > 0) 
    try 
    { 
     int ret=0; 
     DatagramPacket packet = new DatagramPacket(data, data.length); 
     packet.setPort(port); 
     for (int i = 0; i < hosts.length; i++) 
     { 
      try 
      { 
       packet.setAddress(InetAddress.getByName(hosts[i])); 
       socket.send(packet); 
       ret++; 
      } 
      catch (Exception e) 
      { 
       Log.e("SEND:", "Error sending to host: " + hosts[i]); 
       e.printStackTrace(); 
      } 
     } 
     return ret; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return 0; 
} 

Вы можете использовать эту функцию, как это:

try { 
    DatagramSocket socket = new DatagramSocket(); 
    byte[] data = "This is a test message.\n".getBytes(); 
    sendPackets(socket, new String[] { "192.168.1.10", "192.168.1.12", "192.168.1.54" }, 2020, data); 
} 
catch(Exception e){} 
+0

Хорошо, я постараюсь использовать ваш код и ответит вам. Большое спасибо, так или иначе, это дает некоторое представление. – daniyar

Смежные вопросы