Отправка и получение пакетов UDP между двумя программами на том же компьютере

Вы можете использовать его в конструкторе, просто замените

this.setState({
      rows,
      grid,
      fullColumns
    });

на

this.state = {
   ...this.state
   rows,
   grid,
   fullColumns
}
<час>

. Вы также можете переместить initGrid в метод componentDidMount путем рендеринга. null когда состояние компонента не полностью инициализировано или не обеспечивает значимых значений по умолчанию.

render() {
   if(this.state.grid) {
      return ...
   }
   else {
      return null;
   }
}
36
задан Cecil Has a Name 27 March 2009 в 23:43
поделиться

6 ответов

Я не ожидал, что это будет возможно, но.. хорошо.. sipwiz был правильным.

Это может быть сделано очень легко. (Проголосуйте за ответ sipwiz!)

IPEndPoint localpt = new IPEndPoint(IPAddress.Any, 6000);

//Failed try
    try
    {
        var u = new UdpClient(5000);
        u.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

        UdpClient u2 = new UdpClient(5000);//KABOOM
        u2.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
    }
    catch (Exception)
    {
        Console.WriteLine("ERROR! You must call Bind only after setting SocketOptionName.ReuseAddress. \n And you must not pass any parameter to UdpClient's constructor or it will call Bind.");
    }

//This is how you do it (kudos to sipwiz)
    UdpClient udpServer = new UdpClient(localpt); //This is what the proprietary(see question) sender would do (nothing special) 

    //!!! The following 3 lines is what the poster needs...(and the definition of localpt (of course))
    UdpClient udpServer2 = new UdpClient();
    udpServer2.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
    udpServer2.Client.Bind(localpt);
35
ответ дан Tarnay Kálmán 27 November 2019 в 05:14
поделиться

Можно связать с портом многократно с помощью опции сокета ReuseAddress.

UdpClient udpClient = new UdpClient();
udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

Необходимо будет установить ту же опцию на сокете сервера UDP также.

76
ответ дан Mark Heath 27 November 2019 в 05:14
поделиться

Вы смогли помещать несколько IP-адресов на свою сетевую плату или обратную петлю, и связывать сервер и клиент к различным IP-адресам?

Или иначе подход Виртуальной машины будет определенно работать.

2
ответ дан Douglas Leeder 27 November 2019 в 05:14
поделиться

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

Если Вы не хотите сделать некоторое ужасное межпроцессное взаимодействие или пакетный сниффинг, нет никакого способа иметь несколько программ, связанных с одним портом.

1
ответ дан rmmh 27 November 2019 в 05:14
поделиться

Мой совет: не передавайте номер порта в конструктора UdpClient. Из документации, (несколько редкий, я знаю...) похоже, делаете ли Вы, UdpClient попытается связать с тем портом (который, как sysrqb упомянутый, не позволяется). (Если Вы не делаете, я полагаю, что UdpClient послушает на случайном порте для любых ответов. Вы могли также выбрать порт, который Вы знаете, чтобы быть неиспользованными.)

При вызове Подключения (), необходимо передать в номере порта, на котором слушает сервер.

0
ответ дан mpontillo 27 November 2019 в 05:14
поделиться

привяжите две программы, то есть отправителя и получателя к одному и тому же порту на localhost.dats - простой ответ.

0
ответ дан 27 November 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: