Почему TcpListener не слушает? - PullRequest
0 голосов
/ 28 августа 2018

У нас есть приложение C ++ v100, которое обрабатывает каждое событие в нашей системе, прослушивая порт 1705, запуская имя хоста. (это прекрасно работает для приложения C ++, и мы не хотим ничего менять в коде c ++) Мы пытаемся перехватить некоторые из этих событий в решении C # 4.5.2, просто для отображения определенных событий в нашей новой веб-системе. .

Я кодировал следующее, пытаясь прослушать трафик порта 1705 ... но я никогда не получаю никаких данных. (Я могу создавать события, которые отправляются на 1705)

Следующий код запускается, и он превращается в «Ожидание соединения», но никогда не превращается в «Подключен!». Если вы видите в следующем коде причину, по которой я не буду получать данные, сообщите мне:

    private void PortListener()
    {
        TcpListener server = null;
        try
        {
            // Set the TcpListener on port 13000.
            var port = 1705;
            var localAddr = IPAddress.Parse(Dns.GetHostAddresses(Environment.MachineName)[0].ToString());

            server = new TcpListener(localAddr, port);

            // Start listening for client requests.
            server.Start();

            // Buffer for reading data
            var bytes = new byte[256];

            // Enter the listening loop.
            while (true)
            {
                Console.Write("Waiting for a connection... ");

                // Perform a blocking call to accept requests.
                // You could also user server.AcceptSocket() here.
                var client = server.AcceptTcpClient();
                Console.WriteLine("Connected!");

                // Get a stream object for reading and writing
                var stream = client.GetStream();

                int i;

                // Loop to receive all the data sent by the client.
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    // Translate data bytes to a ASCII string.
                    var data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("Received: {0}", data);

                    // Process the data sent by the client.
                    data = data.ToUpper();

                    //TODO:  Process the data
                }

                // Shutdown and end connection
                client.Close();
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine("SocketException: {0}", e);
        }
        finally
        {
            // Stop listening for new clients.
            server?.Stop();
        }
    }

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я все делаю неправильно. Чтобы прослушать уже открытый порт, мне нужно использовать TcpClient для подключения и прослушивания. Только один TcpListener разрешен для каждого порта. Несколько TcpClients могут подключиться одновременно. Вздох.

0 голосов
/ 28 августа 2018

Убедитесь, что вы привязываете / прослушиваете правильный IP-адрес. Если вы привязываете / слушаете локальный хост (127.0.0.1), вы можете подключиться только с одного хоста.

Проверьте что

Dns.GetHostAddresses(Environment.MachineName)[0].ToString());

действительно производит.

...