Сетевой поток всегда пуст! - PullRequest
2 голосов
/ 24 марта 2010

эй, я пишу в программе сервер-клиент но когда мой клиент что-то отправляет, он никогда не достигает моего сервера!

Я отправляю так:

    public void Send(string s)  
    {  
        char[] chars = s.ToCharArray();  
        byte[] bytes = chars.CharToByte();  
        nstream.Write(bytes, 0, bytes.Length);  
        nstream.Flush();  
    }

и получение в фоновом потоке, как это

    void CheckIncoming(object dd)
    {
        RecievedDelegate d = (RecievedDelegate)dd;
        try
        {

            while (true)
            {
                List<byte> bytelist = new List<byte>();
                System.Threading.Thread.Sleep(1000);
                int ssss;
                ssss = nstream.ReadByte();
                if (ssss > 1)
                {
                    System.Diagnostics.Debugger.Break();
                }
                if (bytelist.Count != 0)
                {
                    d.Invoke(bytelist.ToArray());
                }
            }
        }
        catch (Exception exp)
        {
            MSGBOX("ERROR:\n" + exp.Message);
        }
    }

ssss int никогда не> 1 что здесь происходит ???

Ответы [ 3 ]

2 голосов
/ 06 июня 2010

NetworkStream.Flush() фактически не имеет никакого эффекта:

Метод Flush реализует метод Stream .. ::. Flush; однако, поскольку NetworkStream не буферизован, он не влияет [sic] на сетевые потоки. Вызов метода Flush не вызывает исключение

Сколько данных отправляется?
Если вы отправляете недостаточно данных, они могут оставаться в буфере на уровне сети, пока вы не закроете поток или не напишите больше данных.

См. Свойство TcpClient.NoDelay, чтобы узнать, как отключить это, если вы собираетесь отправлять только небольшие порции данных и вам требуется низкая задержка.

0 голосов
/ 24 марта 2010

хорошо, я создаю TcpClient и использую GetStream (); чтобы получить NetworkStream

0 голосов
/ 24 марта 2010

Вы должны изменить проверку возвращаемого значения на if (ssss >= 0).

ReadByte возвращает значение, большее или равное 0, если ему удается прочитать байт ( source ).

Чтобы уточнить комментарий Марка: Как создается nstream? Может быть, есть базовый класс, который не сбрасывает.

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