Tcp Listener и клиент только получает и отправляет один раз - PullRequest
0 голосов
/ 06 ноября 2018

Я использовал другие приложения для каждого слушателя и клиента, и то же самое происходит, когда слушатель stream.read () читает только один раз, а клиент stream.write () пишет только один раз.

вот цикл Слушателя:

while (true)
        {
            Console.Write("Waiting for a connection... ");

            // Perform a blocking call to accept requests.

            TcpClient client = server.AcceptTcpClient();
            Console.WriteLine("Connected!");

            data = null;

            // Get a stream object for reading and writing
            NetworkStream 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.
                data = Encoding.ASCII.GetString(bytes, 0, i);
                Console.WriteLine("Received: {0}", data);

            }

            // Shutdown and end connection
            client.Close();
        }

после первой итерации он просто блокируется и ничего не получает, даже если соединение потеряно, он продолжает блокироваться, однако по прошествии некоторого времени он дает мне следующее исключение:

Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

то же исключение для второго stream.write () на стороне клиента:

System.IO.IOException: Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

Я думаю, что это может быть проблема с брандмауэром, и если да, может кто-нибудь сказать мне, почему это происходит и как это исправить? Заранее спасибо.

Редактировать: stream.DataAvailable имеет значение false после первого stream.read (), поэтому он не является дубликатом По каким причинам NetworkStream.Read зависает / блокируется?

Примечание: код слушателя и код клиента взяты из https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcplistener?view=netframework-4.7.2#examples и https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient?view=netframework-4.7.2#examples

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