急急急!C#接收UDP数据包如何加一个缓存机制减少丢包

朝耕暮耘 2013-05-08 11:41:22
现需要做一个接收UDP数据包的程序,然后将数据包写成文件,数据包不大,但是量很大,需要有缓存机制,不知道具体如何实现缓存机制,求大神指导!!!
...全文
632 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
朝耕暮耘 2013-05-09
  • 打赏
  • 举报
回复
谢谢大家!
shenlanql 2013-05-08
  • 打赏
  • 举报
回复
一个线程读取数据,入队列。(出队入队需加锁) 另外一个线程从队列读取数据。 注意: 数据接收线程判断 网络有数据 就一直接收入队。 数据处理线程判断 队列中有数据,就一直读取处理。
pele7 2013-05-08
  • 打赏
  • 举报
回复
应该是可以的
朝耕暮耘 2013-05-08
  • 打赏
  • 举报
回复
引用 5 楼 pele7 的回复:
当然,如果做的是大型项目,不希望程序异常中断后,队列中的数据丢失;或者是多进程间共享这些数据,那你需要有专门的缓存服务,memcached或者redis之类的吧。
项目也不大,是需要一个线程收数据,另一个线程对数据进行操作,保证数据包不丢就好。。。这样的话队列可以吗
pele7 2013-05-08
  • 打赏
  • 举报
回复
当然,如果做的是大型项目,不希望程序异常中断后,队列中的数据丢失;或者是多进程间共享这些数据,那你需要有专门的缓存服务,memcached或者redis之类的吧。
pele7 2013-05-08
  • 打赏
  • 举报
回复
Queue.Synchronized可以返回一个安全的
朝耕暮耘 2013-05-08
  • 打赏
  • 举报
回复
引用 2 楼 pele7 的回复:
使用队列Queue,然后有专门的线程,从Queue中读数据并向文件中写入
因为数据报数量大,我想做成多线程的,将接收和对数据包的处理分不同线程处理,队列不是线程安全的吧
pele7 2013-05-08
  • 打赏
  • 举报
回复
使用队列Queue,然后有专门的线程,从Queue中读数据并向文件中写入
朝耕暮耘 2013-05-08
  • 打赏
  • 举报
回复
自己想顶一个!!!
please_call_me_J 2013-05-08
  • 打赏
  • 举报
回复
引用 9 楼 prawar007 的回复:
谢谢,我想问一下,我用udpclient.receive来接收很多机器发过来的udp数据包。那么是应该这样写吗:
UdpClient udpClient = new UdpClient(11010);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] buff = udpClient.Receive(ref ipEndPoint);
你接收的代码能接收所有发来的数据,具体这些数据中哪些包是同一个数据被拆分的,要靠你自己发数据的协议来控制并区分,我了解的是不存在说A\B\C三个机器给D,D是没办法说A发来的放一个地方,B发来的放1个地方,C发来的数据方一个地方. 这个识别要你自己在数据包里加东西来区分或者通过发来的ip来区分。
朝耕暮耘 2013-05-08
  • 打赏
  • 举报
回复
引用 8 楼 shenlanql 的回复:
一个线程读取数据,入队列。(出队入队需加锁) 另外一个线程从队列读取数据。 注意: 数据接收线程判断 网络有数据 就一直接收入队。 数据处理线程判断 队列中有数据,就一直读取处理。
谢谢,我想问一下,我用udpclient.receive来接收很多机器发过来的udp数据包。那么是应该这样写吗:
UdpClient udpClient = new UdpClient(11010);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] buff = udpClient.Receive(ref ipEndPoint);

111,097

社区成员

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

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

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