关于udp服务端的问题,求指点啊?

Disa16 2012-01-05 07:53:52
现在要做一个udp的server,有一个接收线程,专门用于接收,一个数据队列,用于存放接收到的数据,一个发送线程,用于处理数据队列的数据,并回复客户端
最初的做法是只建立一个套接字,收发两个线程都用这个套接字进行收发;
后来改成了建立一个固定的套接字用于接收,阻塞收,每次收到数据后重新建立一个套接字用于回应客户端,但是发现这种方法在客户端是局域网内的机器时,无法穿透网关;
然后又在以上的基础上改成了每次新建一个用于发送的套接字时,都绑定在接收套接字同样的端口上,可以穿透网关,但是都有很多的丢包

请问我这几种方式合理么?或者说有没有更好一点的方案呢,恳求大家指点,小弟菜鸟,求指点~
...全文
114 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
无花果 2012-02-14
  • 打赏
  • 举报
回复
最好的做法是,异步线程池模式.
1.创建IOCP.(CreateIoCompletionPort)
2.创建IOCP工作线程.(CreateThread)
3.关联UDP句柄到IOCP上(CreateIoCompletionPort)
4.发起异步接收(WSARecvFrom)
5.工作线程通过(GetQueuedCompletionStatus)取得,接收完成事件。
6.工作线程回应数据包(sendto)可以是阻塞模式。

我做UDP 可靠传输 4年了,对UDP传输效率 了解比较透彻,楼主不明白的话,可以到
http://www.cnasm.com/vtcpsdk/
这里,QQ讨论群(151862355) 讨论UDP编程。


cunyan_0519 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jwybobo2007 的回复:]
最初的做法是只建立一个套接字,收发两个线程都用这个套接字进行收发

------------------------------------
就同一个
[/Quote]
支持,
jwybobo2007 2012-01-06
  • 打赏
  • 举报
回复
最初的做法是只建立一个套接字,收发两个线程都用这个套接字进行收发

------------------------------------
就同一个
fishion 2012-01-06
  • 打赏
  • 举报
回复
你用的是UDP,“建立一个套接字用于回应客户端”,这时你把这个新的套节字的端口告诉客户端了吗
UDX协议 2012-01-06
  • 打赏
  • 举报
回复
全部只用一个SOCKET即可,为啥 要新建一个。
Disa16 2012-01-05
  • 打赏
  • 举报
回复
顶一下,或者说传统的udp的服务端应该采用怎么个策略呢?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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