如题所说的。详细的情况是这样的:我给服务器端第一次发送了:"1234567890";然后我到服务器端打了个断点,测试接收之后的数据是"1234567890",没错,但是,第两次之后,我发送了"test";后,问题就来了。我看到服务器接收的数据变成了:"test567890";也就是说,他只是覆盖了我上一次发送的内容。没覆盖到的仍然连起来发送了。我所想要的结果因该是我发:"test",服务器端就因该接"test",而不要多其它的字符内容。于是我就想到了怎么清空NetWorkStream对象内容的方法,但是我在
NetWorkStream ns=new NetWorkStream(tcpclient.GetStream());ns后打上"."点根本没有相关初始化,或是清空该对象内容的方法或属性。哪位好心的朋友帮帮忙,小弟感激不尽。

解决方案 »

  1.   

    版本信息
    .NET Framework
    受以下版本支持:2.0、1.1、1.0
    .NET Compact Framework
    受以下版本支持:2.0、1.0
    在新的.NET里面已经不支持了
      

  2.   


    我现在用的是.NET 2.0的   就是那个VS2005的。也没有你说的支持的方法清空啊。晕啊,没有朋友来帮忙吗?
      

  3.   

    MSDN
    http://msdn.microsoft.com/zh-cn/library/system.net.sockets.networkstream_methods(VS.80).aspx
    里面有Close方法。没有出现方法,看下Dll引用没有、namespace加了没有
      

  4.   


    我不是没加命令空间的问题。我是说,我要NetWorkStream里找了,没有关于清空NetWorkStream的内容的函数。一般的对象.就可以弹出该对象相关的函数或是属性了。呵呵,你可能误解我说的意思了。不过也罢了。我想到另一种办法解决了。
      

  5.   


    不会清空。只要长度没上一次发的这么长。那会后面的字符串就会上次发送的追加。我也了解了一下,NetWorkStream不提供缓存的,但就是不知道他怎么还有通信痕迹。
      

  6.   

    不是接收的问题,是发送的问题
    在发送前把字节数组清空先
        Byte[] WriteBytes = new Byte[1024];
        
        TcpClient Client = new TcpClient(...);
         NetworkStream Stream = Client.GetStream();
        WriteBytes[0] = 65;
        WriteBytes[1] = 48;
        WriteBytes[2] = 54;
        WriteBytes[3] = 53;
        WriteBytes[4] = 48;
        WriteBytes[5] = 48;
        WriteBytes[6] = 48;
        WriteBytes[7] = 51;
        Stream.Write(WriteBytes, 0, 8);
        .....
        WriteBytes = new Byte[1024]; 
        WriteBytes[0] = 65;
        WriteBytes[1] = 48;
        WriteBytes[2] = 54;
        WriteBytes[3] = 53;
        WriteBytes[4] = 48;
        WriteBytes[5] = 48;
        WriteBytes[6] = 48;
        WriteBytes[7] = 51;
        Stream.Write(WriteBytes, 0, 8);
        
      

  7.   

    上面贴的有点小问题,改下
        Byte[] WriteBytes = new Byte[1024];
        
        TcpClient Client = new TcpClient(...);
         NetworkStream Stream = Client.GetStream();
        WriteBytes[0] = 65;
        WriteBytes[1] = 48;
        WriteBytes[2] = 54;
        WriteBytes[3] = 53;
        WriteBytes[4] = 48;
        WriteBytes[5] = 48;
        WriteBytes[6] = 48;
        WriteBytes[7] = 51;
        Stream.Write(WriteBytes, 0, 1024);
        .....
        WriteBytes = new Byte[1024]; 
        WriteBytes[0] = 12;
        WriteBytes[1] = 33;
        WriteBytes[2] = 54;
        Stream.Write(WriteBytes, 0, 1024);
        
      

  8.   

     public static byte[] Read(NetworkStream netstream)
            {
                byte[] buffer = new byte[1024];
                byte[] rebuffer;
                try
                {
                    int i = netstream.Read(buffer, 0, buffer.Length);
                    rebuffer = new byte[i];
                    Buffer.BlockCopy(buffer, 0, rebuffer, 0, i);
                    return rebuffer;
                }
                catch
                {
                    return null;
                }
            }这个方法可以解决你的问题!
      

  9.   


    你这个方法是覆盖Byte的0-7下标值对应的位。我的那个情况是。后面会自己追加上次的通信数据。即使你覆盖,但到后面不够长的位置,也还是不行。你可能还没遇到过我的情况。你自己试过了,你就知道什么回事啦。
      

  10.   

    NetworkStream stream = client.GetStream();
    应该不是NetworkStream 的问题。
    问题应该在Write 方法发送的byte[] 或接收的byte[] 中。
      

  11.   


    一样的吧,无非把上次传的保存下来->OldWriteByte,然后WriteByte new一个而且长度是原来的长度+新发的内容的长度,最后 OldWriteByte clone->WriteByte->
    WriteByte=WriteByte+新的->发