日期:2014-05-18  浏览次数:20956 次

C Sharp NetWorkStream对象内容怎么清空?
如题所说的。

详细的情况是这样的:

我给服务器端第一次发送了:"1234567890";然后我到服务器端打了个断点,测试接收之后的数据是"1234567890",没错,

但是,第两次之后,我发送了"test";后,问题就来了。我看到服务器接收的数据变成了:"test567890";

也就是说,他只是覆盖了我上一次发送的内容。没覆盖到的仍然连起来发送了。

我所想要的结果因该是我发:"test",服务器端就因该接"test",而不要多其它的字符内容。

于是我就想到了怎么清空NetWorkStream对象内容的方法,但是我在
C# code
NetWorkStream ns=new NetWorkStream(tcpclient.GetStream());


ns后打上"."点根本没有相关初始化,或是清空该对象内容的方法或属性。

哪位好心的朋友帮帮忙,小弟感激不尽。

------解决方案--------------------
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0
.NET Compact Framework
受以下版本支持:2.0、1.0
在新的.NET里面已经不支持了
------解决方案--------------------
你看看你第二次发送的数据,或接收数据的数组是否清空!
------解决方案--------------------
我也遇到同样的问题。。。楼主是怎么解决的??能指教下吗
------解决方案--------------------
不是接收的问题,是发送的问题
在发送前把字节数组清空先

C# code

    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);

------解决方案--------------------
上面贴的有点小问题,改下

C# code

    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);

------解决方案--------------------
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;
}
}

这个方法可以解决你的问题!
------解决方案--------------------
返回值为实际需要读取的数据,也就是说去掉了那些没用的数据!
------解决方案--------------------
解决了没?
------解决方案--------------------
NetworkStream stream = client.GetStream();
应该不是NetworkStream 的问题。
问题应该在Write 方法发送的byte[] 或接收的byte[] 中。
------解决方案--------------------
探讨
你这个方法是覆盖Byte的0-7下标值对应的位。

我的那个情况是。

后面会自己追加上次的通信数据。

即使你覆盖,但到后面不够长的位置,也还是不行。