如题所说的。详细的情况是这样的:我给服务器端第一次发送了:"1234567890";然后我到服务器端打了个断点,测试接收之后的数据是"1234567890",没错,但是,第两次之后,我发送了"test";后,问题就来了。我看到服务器接收的数据变成了:"test567890";也就是说,他只是覆盖了我上一次发送的内容。没覆盖到的仍然连起来发送了。我所想要的结果因该是我发:"test",服务器端就因该接"test",而不要多其它的字符内容。于是我就想到了怎么清空NetWorkStream对象内容的方法,但是我在
NetWorkStream ns=new NetWorkStream(tcpclient.GetStream());ns后打上"."点根本没有相关初始化,或是清空该对象内容的方法或属性。哪位好心的朋友帮帮忙,小弟感激不尽。
NetWorkStream ns=new NetWorkStream(tcpclient.GetStream());ns后打上"."点根本没有相关初始化,或是清空该对象内容的方法或属性。哪位好心的朋友帮帮忙,小弟感激不尽。
解决方案 »
- 开源的皮肤控件
- 问个C#中programbar的问题
- Asp 如何取得Asp.net生成的数组
- C#调用cmd执行命令重新启动应用程序池,但无法运行cscript.exe
- javascript如何定义ubound(arrayname[, dimension]) 参数arrayname
- 一个关于word操作的问题,急!
- 怎么获取远程服务器的即时时间
- pictureBox中怎么上下滚动图片???
- 最后一百分送了:如何读xml某段里的某个元素的所有值!??
- 想在textbox输入字母的时候,小写自动变成大些,有好办法吗?
- 有谁做国家公安部户口信息查询系统的?为什么系统不更新导致那么多的二代居民身份证不能用 。。。
- C#中DataGridView的单元格合并问题
.NET Framework
受以下版本支持:2.0、1.1、1.0
.NET Compact Framework
受以下版本支持:2.0、1.0
在新的.NET里面已经不支持了
我现在用的是.NET 2.0的 就是那个VS2005的。也没有你说的支持的方法清空啊。晕啊,没有朋友来帮忙吗?
http://msdn.microsoft.com/zh-cn/library/system.net.sockets.networkstream_methods(VS.80).aspx
里面有Close方法。没有出现方法,看下Dll引用没有、namespace加了没有
我不是没加命令空间的问题。我是说,我要NetWorkStream里找了,没有关于清空NetWorkStream的内容的函数。一般的对象.就可以弹出该对象相关的函数或是属性了。呵呵,你可能误解我说的意思了。不过也罢了。我想到另一种办法解决了。
不会清空。只要长度没上一次发的这么长。那会后面的字符串就会上次发送的追加。我也了解了一下,NetWorkStream不提供缓存的,但就是不知道他怎么还有通信痕迹。
在发送前把字节数组清空先
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);
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);
{
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;
}
}这个方法可以解决你的问题!
你这个方法是覆盖Byte的0-7下标值对应的位。我的那个情况是。后面会自己追加上次的通信数据。即使你覆盖,但到后面不够长的位置,也还是不行。你可能还没遇到过我的情况。你自己试过了,你就知道什么回事啦。
应该不是NetworkStream 的问题。
问题应该在Write 方法发送的byte[] 或接收的byte[] 中。
一样的吧,无非把上次传的保存下来->OldWriteByte,然后WriteByte new一个而且长度是原来的长度+新发的内容的长度,最后 OldWriteByte clone->WriteByte->
WriteByte=WriteByte+新的->发