怎样清除NetworkStream内缓存的buf

zpc38368330 2015-05-21 11:41:11
在TCP协议客户与服务器交互的时间,如果我不想接收一方已发送的数据,而给对方一个信息,要求对方重新发送新的数据,此时在NetworkStream中缓存了旧的数据,请问怎么样能清空NetworkStream缓存的数据.
我知道读出来即可,不过那样有点傻傻的,是否有比这更好的办法?我在vs里用提示功能找了NetworkStream的相关方法,发现没有clear之类的命令,所以比较好奇,各位大神都是怎么做的?
...全文
541 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
看不破的红尘 2017-12-26
  • 打赏
  • 举报
回复
我也碰到这个问题,我的消息包括帧消息头和消息体,我消息头都异常了,我接下的数据也肯定异常的,我读来就没意义了,我想一碰到异常立即清空缓存。你解决了没?
夜行人 2016-10-18
  • 打赏
  • 举报
回复
只是想知道除了读出来之外有没有直接清空的方法,一群人个个以为自己是大神,在这讨论人家程序实现逻辑问题,我也真是醉了。更甚者,还有直接来嘲讽的,不知道就是不知道,没有就是没有,说直接点不行么。
zpc38368330 2015-05-23
  • 打赏
  • 举报
回复
引用 10 楼 zpc38368330 的回复:
[quote=引用 9 楼 zpc38368330 的回复:] [quote=引用 8 楼 sp1234 的回复:] [quote=引用 6 楼 zpc38368330 的回复:] 额~~不要纠结这里了,我说过这只是极端的情况,比如说我浏览个网页,在地址里输入了错误的地址,然后及时发现输错了,然后迅速点击停止,再此输入新的地址 ,此时客户端的接收 是不是可以把 "接收到剩下的数据并丢弃" 该为 "清空缓存" 因为服务器的延迟,依然在给客户端发送信息,而晚点(客户端的网络延迟)才接收到已停止浏览本站的网页请求头,当然 客户端有各种编程思路来处理此问题, 我还是只是好奇 .net为Tcp/udp等协议创建了接收的缓存空间 ,此缓存空间是否可以直接清空?
除了.net(以及其底层——windows),你所知道的,还有哪个系统或者编程平台是实现了发送tcp消息之后可以过会儿撤回的功能呢?可以说一下你所知道已经实现的,也好理解你的想法。 这个想法也许很好,例如CCTV可以在播出节目之后等观众还没有睡醒的时候或者吃饭而没有来得及抬头看的一瞬间撤回它的节目,我们打电话时可以等对方还没有听明白的时候把我们说出去的话从电话上收回来......想法也许很好,但是实现起来可能需要技术难度。[/quote] linux[/quote] 哦,错了,你没看懂我所表达的意思,请看懂了再来解答,而且我的帖子已经结了,不能给你分了. 什么叫发送回去再收回来,我说的是清空![/quote] 我人直点别见怪,有些话不说不痛快,前面你回答我的跨线程调用控件的疑问,你就上来嘲笑了几句,说什么我误认为dispose是释放的意思,dispose在vs中就是提示的释放,你在主窗口敲个this.dispose看看vs给的提示.而且虽然其没在内存释放,但是在理论上已经释放了,因为你在某些组件中调用dispose然后再次调用,直接就会出现异常,因为.net已经将其标记为释放.你创建个sql的connect,然后dispose然后紧接着再调用它试试. 仅是我一个人的问题我还懒的跟你掰掰,但是今天我正对tcp传输的一问题闹心的时间,上google搜索答案又搜到了csdn,一仁兄解决不了tcp的截包的问题,看到你居然又再掰掰你的NB理论,扁了楼主,还说传输就要用XML,JSON,你这不是雪上加霜吗?人家序列化后为TCP的截包问题犯愁,好歹序列化后只是丢了个后续包,如果再用你的XML,JSON传输,截包后你知道会发生什么吗?那不是丢的问题了,直接就异常,处理不好,连前面接收的数据都可能丢了. 此论坛有你这么个活跃的积极分子,实在是那个什么一粒沙坏了什么什么,一滴墨坏了什么什么.你知识高,自己来补后面的字吧. 我睡觉去了 哦,对了还有你下面这句话 除了.net(以及其底层——windows),你所知道的,还有哪个系统或者编程平台是实现了发送tcp消息之后可以过会儿撤回的功能呢?可以说一下你所知道已经实现的,也好理解你的想法。 我想能看懂中文的都知道,你的意思其实是说 .net(以及其底层——windows)实现了发送tcp消息之后可以过会儿撤回的功能 哈哈,经典!!!
zpc38368330 2015-05-23
  • 打赏
  • 举报
回复
引用 9 楼 zpc38368330 的回复:
[quote=引用 8 楼 sp1234 的回复:] [quote=引用 6 楼 zpc38368330 的回复:] 额~~不要纠结这里了,我说过这只是极端的情况,比如说我浏览个网页,在地址里输入了错误的地址,然后及时发现输错了,然后迅速点击停止,再此输入新的地址 ,此时客户端的接收 是不是可以把 "接收到剩下的数据并丢弃" 该为 "清空缓存" 因为服务器的延迟,依然在给客户端发送信息,而晚点(客户端的网络延迟)才接收到已停止浏览本站的网页请求头,当然 客户端有各种编程思路来处理此问题, 我还是只是好奇 .net为Tcp/udp等协议创建了接收的缓存空间 ,此缓存空间是否可以直接清空?
除了.net(以及其底层——windows),你所知道的,还有哪个系统或者编程平台是实现了发送tcp消息之后可以过会儿撤回的功能呢?可以说一下你所知道已经实现的,也好理解你的想法。 这个想法也许很好,例如CCTV可以在播出节目之后等观众还没有睡醒的时候或者吃饭而没有来得及抬头看的一瞬间撤回它的节目,我们打电话时可以等对方还没有听明白的时候把我们说出去的话从电话上收回来......想法也许很好,但是实现起来可能需要技术难度。[/quote] linux[/quote] 哦,错了,你没看懂我所表达的意思,请看懂了再来解答,而且我的帖子已经结了,不能给你分了. 什么叫发送回去再收回来,我说的是清空!
zpc38368330 2015-05-23
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
[quote=引用 6 楼 zpc38368330 的回复:] 额~~不要纠结这里了,我说过这只是极端的情况,比如说我浏览个网页,在地址里输入了错误的地址,然后及时发现输错了,然后迅速点击停止,再此输入新的地址 ,此时客户端的接收 是不是可以把 "接收到剩下的数据并丢弃" 该为 "清空缓存" 因为服务器的延迟,依然在给客户端发送信息,而晚点(客户端的网络延迟)才接收到已停止浏览本站的网页请求头,当然 客户端有各种编程思路来处理此问题, 我还是只是好奇 .net为Tcp/udp等协议创建了接收的缓存空间 ,此缓存空间是否可以直接清空?
除了.net(以及其底层——windows),你所知道的,还有哪个系统或者编程平台是实现了发送tcp消息之后可以过会儿撤回的功能呢?可以说一下你所知道已经实现的,也好理解你的想法。 这个想法也许很好,例如CCTV可以在播出节目之后等观众还没有睡醒的时候或者吃饭而没有来得及抬头看的一瞬间撤回它的节目,我们打电话时可以等对方还没有听明白的时候把我们说出去的话从电话上收回来......想法也许很好,但是实现起来可能需要技术难度。[/quote] linux
zpc38368330 2015-05-22
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
恰巧此时客户端认为刚才的命令是个错误的命令 是客户端认为是错误的命令,还是用户认为是个错误的命令? 如果是用户点错了,还可以理解 如果是客户端出错了,那之前根本就不应该发送.怎么发送完了才觉得发错了??? 而且客户端认为不认为错误不是重点 重点是之前的命令已经发给服务端了,服务端怎么取消之前的指令,不要再按错误的指令继续操作了
额~~不要纠结这里了,我说过这只是极端的情况,比如说我浏览个网页,在地址里输入了错误的地址,然后及时发现输错了,然后迅速点击停止,再此输入新的地址 ,此时客户端的接收 是不是可以把 "接收到剩下的数据并丢弃" 该为 "清空缓存" 因为服务器的延迟,依然在给客户端发送信息,而晚点(客户端的网络延迟)才接收到已停止浏览本站的网页请求头,当然 客户端有各种编程思路来处理此问题, 我还是只是好奇 .net为Tcp/udp等协议创建了接收的缓存空间 ,此缓存空间是否可以直接清空?
於黾 2015-05-22
  • 打赏
  • 举报
回复
恰巧此时客户端认为刚才的命令是个错误的命令 是客户端认为是错误的命令,还是用户认为是个错误的命令? 如果是用户点错了,还可以理解 如果是客户端出错了,那之前根本就不应该发送.怎么发送完了才觉得发错了??? 而且客户端认为不认为错误不是重点 重点是之前的命令已经发给服务端了,服务端怎么取消之前的指令,不要再按错误的指令继续操作了
zpc38368330 2015-05-22
  • 打赏
  • 举报
回复
这只是在一些极端的情况下,比如客户给服务器发送了一个命令 ,然后因为服务器的延迟,数据来了晚些,恰巧此时客户端认为刚才的命令是个错误的命令,想重新发送个,此时服务器的数据已经来了.... 当然这是一种极端的情况,我只是有点好奇,是否.net有什么方式可以直接清空缓存 ,如下逻辑思路是不是好看点 1.清空下缓存 2.发送新命令 3 时间定时器启动 {循环 4.尝试读取新数据 5如果超时退出 } 这个第一步比 "读出数据并丢弃"是不是好看多了~~ flush在VS的编译器里提示是"保留此方法供以后使用",而且据说flush现在只是一个空的函数,此函数体内什么代码也没有
於黾 2015-05-22
  • 打赏
  • 举报
回复
flush试过吗
Justin-Liu 2015-05-22
  • 打赏
  • 举报
回复
难道不是通过读出来的数据判断是不是接受发来的数据的吗?首先得打个招呼吧
江南小鱼 2015-05-22
  • 打赏
  • 举报
回复
你不读出来,怎么判断对方发的是不是你想要的?
  • 打赏
  • 举报
回复
引用 6 楼 zpc38368330 的回复:
额~~不要纠结这里了,我说过这只是极端的情况,比如说我浏览个网页,在地址里输入了错误的地址,然后及时发现输错了,然后迅速点击停止,再此输入新的地址 ,此时客户端的接收 是不是可以把 "接收到剩下的数据并丢弃" 该为 "清空缓存" 因为服务器的延迟,依然在给客户端发送信息,而晚点(客户端的网络延迟)才接收到已停止浏览本站的网页请求头,当然 客户端有各种编程思路来处理此问题, 我还是只是好奇 .net为Tcp/udp等协议创建了接收的缓存空间 ,此缓存空间是否可以直接清空?
除了.net(以及其底层——windows),你所知道的,还有哪个系统或者编程平台是实现了发送tcp消息之后可以过会儿撤回的功能呢?可以说一下你所知道已经实现的,也好理解你的想法。 这个想法也许很好,例如CCTV可以在播出节目之后等观众还没有睡醒的时候或者吃饭而没有来得及抬头看的一瞬间撤回它的节目,我们打电话时可以等对方还没有听明白的时候把我们说出去的话从电话上收回来......想法也许很好,但是实现起来可能需要技术难度。
zpc38368330 2015-05-22
  • 打赏
  • 举报
回复 1
唉~好奇心杀死一只猫, 我的好奇心干掉了我40分~~ 不过依然真心的谢谢各位的解答. 看来.net是真的不提供清空缓存的功能了,估计.net的思路就是,我给你发了数据,你必须看一下,哪怕你拿过来就丢垃圾箱也要看下

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧