Проблемы с сокетом C # - PullRequest
       3

Проблемы с сокетом C #

0 голосов
/ 21 февраля 2019

Я подключился к ПК с помощью кабеля в попытке симулировать сервер \ клиент.Сервер начинает прослушивание в определенной конечной точке, а иногда и клиент подключается.Все прошло хорошо, и я установил максимальную скорость около 24 Мбит / с для одного соединения (порта).
Так что теперь я поменял роли и не могу установить соединение Socket.BeginConnect(ServerEndPoint, new AsyncCallback(OnConnectCallback), _ClientSocket) раз и установил для localEndpoint значение 0.0.0.0

Вот код для клиента:

public void ConnectToServer(IPAddress iPAddress, int Port)
    {
        connected.Reset();
        IPEndPoint ServerEndPoint = new IPEndPoint(iPAddress, Port);

        try
        {
            _ClientSocket = new Socket(iPAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            _ClientSocket.BeginConnect(ServerEndPoint, new AsyncCallback(OnConnectCallback), _ClientSocket);

            connected.WaitOne();

            // Here I would like to start async receiving but there's no connection
        }
        catch (SocketException)
        {
            // TODO:
        }
    }

private void OnConnectCallback(IAsyncResult result)
    {
        try
        {
            Socket client_StateSocket = (Socket)result.AsyncState;

            client_StateSocket.EndConnect(result);

            /// Here I get 0.0.0.0
            connected.Set();
        }

        catch (SocketException)
        {
            // TODO:
        }
    }

Сервер основан на примере MSDN.Он начинает прослушивать входящие соединения, идет в постоянном цикле while и сидит в ожидании запуска Socket.BeginAccept (но он никогда не срабатывает).
Я подозревал, что брандмауэр, но настройки выглядят одинаково на обоих ПК, и работает нормально вобратный путь, так в чем может быть проблема?

1 Ответ

0 голосов
/ 21 февраля 2019

Когда вы разрабатываете архитектуру «сервер / клиент», обычно достаточно, чтобы оба работали на одной машине и позволяли им общаться по IP-адресу обратной связи.Как правило, сетевой код не заботится о том, находится ли другой конец на том же компьютере, тот же коммутатор или зонд Voyager 2 (ну, им все равно, поскольку задержка довольно высока).

Если у вас возникают проблемы при развертывании / тестировании, то с вероятностью 99% вы имеете дело с Networking проблемой, а не с программированием.Иногда могут потребоваться некоторые изменения (например, возможность установки параметров прокси-сервера).Но сначала отладка будет сетевой операцией.

Мои первые предположения касаются брандмауэров (в том числе встроенных в Windows).И затем вещи, которые работают подобно брандмауэру, например уровни NAT.

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