TCP IP клиент / сервер не может подключиться - PullRequest
0 голосов
/ 11 октября 2019

У меня есть небольшое клиентское приложение TCP Client, которое не может подключиться и выдает ошибку тайм-аута, и я могу понять, почему.

Я получаю ошибку

System.Net.Sockets.SocketException (0x80004005): Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через определенный промежуток времени, или не удалось установить соединение, так как подключенный хост не смог ответить 161.242.249.63:5000 в System.Net. Sockets.TcpClient..ctor (String hostname, Int32 port)

Ниже приведен список шагов, которые я пробовал:

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

  2. Я могу пропинговать оба компьютера по имени иАйпи адрес. IPv6 также был отключен. ПК соединены кабелем Cat5e Ethernet примерно на полметра.

  3. Я проверил все правила брандмауэра и разрешил трафик через порт 5000 на обоих компьютерах

  4. На CMD я подтвердил, что порт слушает, используя netstat-a

  5. с помощью Putty, я могу telnet с любой машины и установить соединение с сервером

Я не уверен, почему я не могу сделатьсоединение из моего клиентского приложения

Код сервера

//string IP = ServerSocket.getIP();
        string IP = "161.242.249.63";

        IPAddress localAdd = IPAddress.Parse(IP);
        Console.WriteLine("IP Address is :" + IP);
        TcpListener listener = new TcpListener(localAdd, 5000);
        listener.Start();
        while (true)
        {
            //---incoming client connected---
            TcpClient client = listener.AcceptTcpClient();

            //---get the incoming data through a network stream---
            NetworkStream nwStream = client.GetStream();
            byte[] buffer = new byte[client.ReceiveBufferSize];

            //---read incoming stream---
            int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);

            //---convert the data received into a string---
            string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            Console.WriteLine("Data Received");
            string[] data = dataReceived.Split(',');
            data[2]= data[2].Remove(data[2].Length-1);
            bool validate = ValidateAgainstADAndGroup(data[0], data[1], data[2]);

            if (validate)
            {
                byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes("*");
                //---write back the text to the client---
                Console.WriteLine("Sending back : OK " );
                nwStream.Write(bytesToSend, 0, bytesToSend.Length);
                client.Close();
            }

            else
            {
                byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes("!");
                //---write back the text to the client---
                Console.WriteLine("Sending back : Error");
                nwStream.Write(bytesToSend, 0, bytesToSend.Length);
                client.Close();

            }

Код клиента

 TcpClient client = new TcpClient("10.248.37.62", 5000);
        NetworkStream nwStream = client.GetStream();
        byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(message);

        //send data
        nwStream.Write(bytesToSend, 0, bytesToSend.Length);

        //---read back the text---
        byte[] bytesToRead = new byte[client.ReceiveBufferSize];
        int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize);
        // Console.WriteLine("Received : " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead));
        client.Close();

Буду рад, если кто-нибудь сможет помочь с этим?

1 Ответ

0 голосов
/ 11 октября 2019

Это скорее проблема сети, так как в предоставленном коде нет ничего неправильного.

Похоже, что вы пытаетесь привязать сервер к общедоступному IP-адресу, хотя это неверно, так как система не знает, каков ее собственный IP-адрес.

Вы должны привязать его к сетиинтерфейс или использовать IPAddress.Any.

https://docs.microsoft.com/en-us/dotnet/api/system.net.ipaddress.any?view=netcore-3.0

...