Проблемы с подключением розеток между ПК - PullRequest
0 голосов
/ 19 апреля 2011

У меня проблемы с получением простого приложения сокет сервер / клиент, работающего в C #, между двумя компьютерами, и у меня закончились идеи.Я использую Windows XP на обеих машинах, и я добавил исключения для брандмауэра как для порта, который я пытался подключить, так и для исполняемого файла.Странно то, что он отлично работает как с клиентом, так и с сервером, работающим на одной машине.

Код сервера:

IPAddress ipAddress;
IPAddress.TryParse("127.0.0.1", out ipAddress);

IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 51000);
_ListenerSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.IP);
try
{
    _ListenerSocket.Bind(localEndPoint);
    _ListenerSocket.Listen(1000);

    while (_Running)
    {
        _ListenerSync.Reset();
        _ListenerSocket.BeginAccept(new AsyncCallback(AcceptCallback), _ListenerSocket);
        _ListenerSync.WaitOne();
    }

    _ListenerSocket.Shutdown(SocketShutdown.Both);
    _ListenerSocket.Close();
}

Код клиента:

tTarget = new Socket(_IP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tTarget.Connect(_IP, 51000);

AcceptCallbackникогда не вызывается.Так что что-то отклоняет соединение до того, как это срабатывает.Эта настройка клиент / сервер работает для внутренних подключений на одном компьютере (на котором клиент и сервер работают на одном компьютере), но происходит сбой при попытке соединить две машины вместе в локальной сети.

Исключение выдается при вызове tTarget.Connect ():

No connection could be made because the target machine actively refused it

Я установил wireshark на обеих машинах, чтобы убедиться, что пакеты прибывают, 106 является клиентом и101 является сервером.

262 24.724892   192.168.0.106   192.168.0.101   TCP brlp-2 > 51000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
263 24.724922   192.168.0.101   192.168.0.106   TCP 51000 > brlp-2 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
270 25.144866   192.168.0.106   192.168.0.101   TCP brlp-2 > 51000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
271 25.144887   192.168.0.101   192.168.0.106   TCP 51000 > brlp-2 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
288 25.647842   192.168.0.106   192.168.0.101   TCP brlp-2 > 51000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
289 25.647874   192.168.0.101   192.168.0.106   TCP 51000 > brlp-2 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0

Примечание. Это все сетевое соединение через порт 51000 до возникновения исключения.

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

Ответы [ 2 ]

3 голосов
/ 19 апреля 2011

Свяжите это с адресом 0.0.0.0. Это означает «все локальные адреса, какими бы они ни были».

Жесткое кодирование локального адреса - плохая, плохая идея. Лучше сделать его настраиваемым, но это необходимо только в том случае, если вы хотите явно разрешить прослушивание одних локальных адресов, но не других. Для серверного программного обеспечения корпоративного уровня это иногда является обязательным требованием (сценарии многосетевого сервера и т. Д.).

3 голосов
/ 19 апреля 2011

Используйте IP-адрес сервера, а не адрес localhost , 127.0.0.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...