C#实现Tcp传输有必要用到完成端口么?

lovetyz 2012-04-05 03:08:27
C#实现Tcp传输有必要用到完成端口么,目前我是用的socket异步收发 beginReceive后把数据放到队列中, 每个socket有一个队列存储数据,因为有粘包问题,所以只有1个线程处理数据,把数据处理成为完整的数据包后,再丢到另外一个队列,供多个线程去处理数据包。

看了一下完成端口的原理,是把socket绑定到完成端口,收到的数据都存放在完成端口的一个队列中,然后线程池中的空闲线程去队列中取数据进行处理。但是没想明白这样如何处理粘包问题。

不知道我的理解有没有问题,希望有经验的同行能给些指点!
...全文
264 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovetyz 2012-04-09
  • 打赏
  • 举报
回复
嗯 根据2楼的提示找到了 谢谢

SocketAsyncEventArgs是.net提供的关于异步socket类,封装了IOCP的使用,可以用它方便的实现NIO(non-blocking IO)
lovetyz 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

2.0sp1后的 新加的那种方式就是完成端口的。你可以直接用就好了。
[/Quote]

这位朋友 你说的那种方式是什么方式呢?能不能说得明白点?
nonocast 2012-04-05
  • 打赏
  • 举报
回复
异步就ok了
stonespace 2012-04-05
  • 打赏
  • 举报
回复
没必要用完成端口,完成端口很复杂,用起来麻烦,
lovetyz 2012-04-05
  • 打赏
  • 举报
回复
我是想知道是否C#里面已经封装好了,如果内部的原理跟完成端口的是一回事,那就没必要调用API照着VC的实现方式硬套了。

这六种模式刚才我也去搜了一下,感觉异步BeginReceive跟WSAAsyncEvent模式有点像
Jelena景 2012-04-05
  • 打赏
  • 举报
回复
理想条件下最好线程不要切换,而又能象线程池一样,重复利用。I/O完成端口就是使用了线程池。学习啦
足球中国 2012-04-05
  • 打赏
  • 举报
回复
2.0sp1后的 新加的那种方式就是完成端口的。你可以直接用就好了。
bdmh 2012-04-05
  • 打赏
  • 举报
回复
用不用随你,没什么有没有必要,完成端口只是内置了一个线程池,具体的你可以看看socket六种模式

111,120

社区成员

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

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

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