У меня есть ПЛК, напрямую подключенный через кабель Ethernet к ноутбуку Win10, работающему под управлением Unity3d.Моя цель - отправлять данные из ПЛК в модель Unity с использованием соединения UDP.
В настоящее время ПЛК отправляет сообщения каждую секунду, и они видны в Wireshark.
Половина Unity имеетReceive-Thread работает.Может принимать через локальное IP-соединение 127.0.0.1.У меня также есть отправитель, реализованный в Unity для проверки этого, и он работает как положено.
Что не работает, так это получение сообщений от ПЛК, направленных на тот же порт, что и внутреннее соединение.
Пока что я ...
- ... установил порт Ethernet на статический IP (192.168.0.41)
- ... открыл порты для UDP-связи в брандмауэре, это не должно быть проблемой.
- ... изменил принимающий порт (в настоящее время установлен на 8052)
- ... пробовал варианты настройки клиента, ничего не изменилось.
- ... безуспешно исследовал и копался в разных темах и комментариях.Хотя я обнаружил, что другие люди сталкивались с той же проблемой, никто не опубликовал ответ.
Unity3d C # Код получения (сокращен до соответствующих частей):
private void init()
{
port = 8052;
receiveThread = new Thread( new ThreadStart(ReceiveData));
receiveThread.IsBackground = true;
receiveThread.Start();
}
private void ReceiveData()
{
// create a client
client = new UdpClient(port);
while (true)
{
// if an Error occours the program doesn't crash
try
{
// Create connection point and receiving client + receiving bytes
IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, port);
byte[] data = client.Receive(ref anyIP);
print("Number of bytes: " + data.Length.ToString());
/*
* use the received data
*/
}
catch (Exception err)
{
//Output if receiving experienced an error
print(err.ToString());
}
}
}
}
Что, я думаю, могло быбыть проблема:
- Существует еще один уровень, который может заблокировать соединение рядом с брандмауэром, который я еще не рассматривал
- Настройка клиента должна отличаться для получения сообщений от внешнихsources.
- Требуется асинхронный UDP-клиент
Код (приема) основан на: Простая реализация UDP .
Дополнительный вопрос, поскольку я совсем новичок в сети: если Wireshark может видеть пакет, не должен ли он уже пройти через брандмауэр и другие возможные уровни блокировки?Или Wireshark смотрит на еще более низкий уровень связи?
Заранее спасибо!
Скриншоты из Wireshark: Несколько входящих сообщений Подробности одного сообщения