Невозможно прочитать поток байтов в C # - PullRequest
0 голосов
/ 02 апреля 2012

Я создаю клиент-серверное приложение, в котором клиент должен отправить некоторый поток байтов, а сервер отвечает на него на основе байтов, полученных от клиента. Я использую методы NetworkStream.Write и NetworkStream.Read для отправки и получения данных. Клиент может создать TCP-соединение с сервером. После принятия подключения сервер делает NetworkStream.Read и ожидает некоторого ввода от клиента. Клиент отправляет данные, используя NetworkStream.Write, а также делает NetworkStream.Flush. Но Сервер никогда не выходит из режима чтения.

Не могли бы вы, ребята, подсказать мне, в чем может быть проблема здесь, или если вы знаете какие-либо другие способы отправки байтового потока через TCP-соединение в C #, пожалуйста, дайте мне знать.

Спасибо!

1 Ответ

1 голос
/ 02 апреля 2012

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

Используя модифицированную версию кода, найденного здесь , я построил простой пример, который работает в моем тестировании.

    public static void Main()
    {
        TcpListener server = null;
        try
        {
            // Set the TcpListener on port 13000.
            Int32 port = 13000;
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");

            // TcpListener server = new TcpListener(port);
            server = new TcpListener(localAddr, port);

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

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

            Console.Write("Waiting for a connection... ");

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

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

            stream.Read(bytes, 0, bytes.Length);
            Console.WriteLine(System.Text.Encoding.ASCII.GetString(bytes));
            // Shutdown and end connection
            client.Close();
        }
        catch (SocketException e)
        {
            Console.WriteLine("SocketException: {0}", e);
        }
        finally
        {
            // Stop listening for new clients.
            server.Stop();
        }


        Console.WriteLine("\nHit enter to continue...");
        Console.Read();
    }

Вызов чтения будет ждать и возвращаться, когда я отправлю его на 1 байт другой программе. Нам нужно увидеть код, чтобы понять, почему это работает, а ваш - нет.

...