UDP并发的问题:服务端的端口号接受的数据不容易区分!

wirner 2013-05-14 02:31:29
作为udp服务器,要能处理并发请求,那么在一个端口侦听就会出现数据紊乱,要区别出对应客户端的数据是不容易的。
1 . 有网友说通过就发送过来的IP地址来区分是那个终端发生过来的。
2 . 服务端申请系统临时端口来与客户端通信,客户端需记下新的服务器端口地址,这一单一通道只与该客户端交互,交互完毕关掉临时端口,临时端口的申请可以通过再建立socket 来实现。
3 . 还有提到用消息队列;



不知道用那种方式比较好,各位不惜赐教,共同探讨。
...全文
436 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
btkernel 2013-05-18
  • 打赏
  • 举报
回复
UDP一般是不存在并发的情况,不太清楚你的业务逻辑,一般的处理方式有以下2种情况: 1,服务器不需要保存客户端的上下文逻辑数据: 这种情况处理起来比较简单,以下为大概的处理流程: 1,ListenThread接收到数据后,把数据和对方的端口和IP插入数据包队列 2,WorkThread线程处理数据包队列中的数据后把需要发送的数据插入发送队列 3,SendThread发送数据给客户端 2,服务器需要保存客户端的上下文数据: 这种情况下稍微比较复杂一点,如果可以用TCP就尽量用TCP,TCP比较简单一点 一般的做法是给每个客户端分配一个唯一的ID(GUID),第一次和服务器通信时需要一个初始化的过程, 类似TCP的握手操作,在服务端保存每个ID的上下问数据,这样服务器就可以识别每个客户端了。 以上的方式还有些小问题,就是客户端发送数据的时候都需要带一个ID号,ID号一般都是比较长的字符 串,在服务器上对数据进行分类的时候效率也不是很高,所以最好是用客户端的IP+PORT的整型数据作为 KEY关联起来,这样在客户端的每个SOCKET需要定时的发心跳包服务端来保持客户端的外网端口不会比路 器关闭。其它的细节就需要自己慢慢琢磨下了。 在以前的P2P项目中就用的第二种的方式,因为需要进行内网穿透和可靠传输的处理。 以上希望对你有所帮助
wirner 2013-05-14
  • 打赏
  • 举报
回复
没有人能指点一下我嗎

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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