Сбой клиента сервера C# при подключении UWP (2)

У меня возникла проблема с подключением моего ПК с Windows 10 к Raspberry Pi под управлением Windows 10 IoT (17763, которая кажется самой последней) через TCP. RPI должен быть сервером, а ПК с Windows 10 — клиентом.

Я нашел следующую документацию по Socket: https://docs.microsoft.com/de-de/windows/uwp/networking/sockets, который представляет собой хорошо понятный пример UWP. В этом примере сервер и клиент запускаются только в одном приложении. Рассуждение:

Чтобы начать с как можно меньшего количества движущихся частей — и пока обойти проблемы изоляции сети — создайте новый проект и поместите клиентский и серверный код ниже в один и тот же проект.

Эти примеры отлично работают как на ПК, так и на RPI. Я попробовал это: а) используя «localhost» и б) отдельные IP-адреса ПК и RPI => OK.

Я разделил пример на два приложения и запустил сервер на RPI, а клиент на ПК. Конечно, я добавил IP-адрес RPI в клиенте

static string Server = "192.168.178.78";    // Raspberry PI
...
var hostName = new Windows.Networking.HostName(Server);

К сожалению, соединение не устанавливается и время ожидания клиента истекает (ошибка 0x8007274C).

В Wireshark (на ПК) я вижу:

No.     Time           Source                Destination           Protocol Length Info
    320 34.221418      192.168.178.38        192.168.178.78        TCP      66     50198 → 1337 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1

плюс ряд повторных передач. Поскольку соединение не работает, я отключил брандмауэр на ПК. Это тоже не помогает. Хотя настройки порта не должны иметь значения, я открыл TCP-порт 1337 на своем маршрутизаторе.

В следующем потоке возникла та же проблема, но это было связано с запуском обоих приложений на одном компьютере. Как только Свен разделил клиент и сервер на ПК ‹-> мобильный телефон, у него это сработало.

Сбой клиента сервера C# при подключении UWP

Я провел сеанс отладки CheckNetIsolation.exe для клиента и сервера. Оба дали следующий результат (Примечание: здесь указан только один сеанс):

C:\WINDOWS\system32>CheckNetIsolation.exe Debug -p=S-1-15-2-1267940166-3928243817-861952377-2407264183-3106597897-3574865703-2117263357

Eine Netzwerkisolations-Debugsitzung wurde gestartet.
Reproduzieren Sie das Szenario, und drücken Sie dann STRG+C.
      Protokolle werden gesammelt........

Zusammenfassungsbericht

Status der Netzwerkfunktionen
----------------------------------------------------------------------
    InternetClient                Not Used and Insecure
    PrivateNetworkClientServer    Not Used and Insecure


Detaillierter Datenverkehrsbericht
----------------------------------------------------------------------

    InternetClient                Not Used and Insecure

 ------------------------------------------------------------------


    PrivateNetworkClientServer    Not Used and Insecure

 ------------------------------------------------------------------
OK

Есть идеи? Буду очень признателен за предложения по устранению этой проблемы.


person Uwe    schedule 23.02.2020    source источник
comment
Возможно, вам придется использовать имя компьютера вместо IP. Для работы IP нужен маршрут от клиента к серверу и от сервера к клиенту. Возможно, что одно направление работает, а другое нет. Так что лучше всего сделать это из cmd.exe › Ping IP или имя компьютера. Сначала вы должны заставить работать PING, который проверяет маршрут (ping игнорирует номер порта). Попробуйте пропинговать в обоих направлениях. Если это не сработает, попробуйте промежуточный компьютер, чтобы увидеть, что работает, а что нет. Любая попытка с IP-адресом и именем компьютера. Возможно, у вас есть два ПК с одинаковым IP. Если пинг работает. отключите работающий ПК, чтобы проверить, работаете ли вы.   -  person jdweng    schedule 23.02.2020
comment
@Uwe, вы добавили правило брандмауэра для порта сервера, чтобы разрешить связь в Raspberry PI? Многие пользователи вызвали ту же проблему, пропустив правило брандмауэра. Пожалуйста, обратитесь к этой теме (stackoverflow.com/questions/36502484 /).   -  person Michael Xu - MSFT    schedule 24.02.2020
comment
@jdweng: я пробовал пинговать по адресу и имени. Работает с обоих концов. Комментарий: при использовании имени ПК/RPI кажется, что IP V6 автоматически разрешается, и ping не работает. При форсировании ping -4 ‹name› он разрешает IPV4 и ping работает. Это дает мне хороший намек на возможные будущие проблемы. Большое спасибо за ваше предложение.   -  person Uwe    schedule 24.02.2020
comment
@Майкл Сюй. Удивительно!! Это решило мою проблему. Я открыл порт на RPI, и он работает как шарм. Мне даже не нужно открывать порт на стороне ПК. Каким-то образом я избавился от беспокойства по поводу брандмауэра в Windows 10 IoT. Я должен был знать или, по крайней мере, искать его. Большое спасибо!!!   -  person Uwe    schedule 24.02.2020


Ответы (1)


Обратитесь к комментарию Майкла Ксуса. Порт на Raspberry Pi должен был быть открыт

netsh advfirewall firewall add rule name="pidart port 1337" dir=in action=allow protocol=TCP localport=1337

Это решило проблему

person Uwe    schedule 24.02.2020