Вы можете использовать его в конструкторе, просто замените
this.setState({
rows,
grid,
fullColumns
});
на
this.state = {
...this.state
rows,
grid,
fullColumns
}
<час> . Вы также можете переместить initGrid
в метод componentDidMount
путем рендеринга. null
когда состояние компонента не полностью инициализировано или не обеспечивает значимых значений по умолчанию.
render() {
if(this.state.grid) {
return ...
}
else {
return null;
}
}
Я не ожидал, что это будет возможно, но.. хорошо.. 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);
Можно связать с портом многократно с помощью опции сокета ReuseAddress.
UdpClient udpClient = new UdpClient();
udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
Необходимо будет установить ту же опцию на сокете сервера UDP также.
Вы смогли помещать несколько IP-адресов на свою сетевую плату или обратную петлю, и связывать сервер и клиент к различным IP-адресам?
Или иначе подход Виртуальной машины будет определенно работать.
Только одна программа может связать с портом за один раз. Несколько программ могут соединиться с одним портом в другой системе, но локальный порт, с которым Ваши различные веб-браузеры связали себя, случайным образом присвоен.
Если Вы не хотите сделать некоторое ужасное межпроцессное взаимодействие или пакетный сниффинг, нет никакого способа иметь несколько программ, связанных с одним портом.
Мой совет: не передавайте номер порта в конструктора UdpClient. Из документации, (несколько редкий, я знаю...) похоже, делаете ли Вы, UdpClient попытается связать с тем портом (который, как sysrqb упомянутый, не позволяется). (Если Вы не делаете, я полагаю, что UdpClient послушает на случайном порте для любых ответов. Вы могли также выбрать порт, который Вы знаете, чтобы быть неиспользованными.)
При вызове Подключения (), необходимо передать в номере порта, на котором слушает сервер.
привяжите две программы, то есть отправителя и получателя к одному и тому же порту на localhost.dats - простой ответ.