网络流总是空的!

时间:2010-03-24 13:22:38

标签: c# networking

嘿,我正在编写Server-Client程序 但是当我的客户发送东西时,它永远不会到达我的服务器!

我发送的是这样的:

    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 个答案:

答案 0 :(得分:2)

NetworkStream.Flush()实际上没有效果:

  

Flush方法实现Stream .. ::。Flush方法;但是,因为NetworkStream没有缓冲,所以它对网络流没有影响[sic]。调用Flush方法不会抛出异常

正在发送多少数据? 如果您没有发送足够的数据,它可能会在网络级别保持缓冲,直到您关闭流或写入更多数据。

如果您要发送小块数据并且需要低延迟,请参阅TcpClient.NoDelay属性以获取禁用此功能的方法。

答案 1 :(得分:0)

您应该将返回值的检查更改为if (ssss >= 0)

如果成功读取一个字节(source),则ReadByte返回大于或等于0的值。

详细说明Marc的评论:如何创建nstream?也许有一个基础类不会刷新。

答案 2 :(得分:0)

好吧,我正在创建一个TcpClient,并使用GetStream();获取NetworkStream