免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2050 | 回复: 3
打印 上一主题 下一主题

请教端口分配问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-19 10:36 |只看该作者 |倒序浏览
问题描述:有一个服务器程序,要为每一个来请求的客户端程序分配一个UDP端口用来接收客户端发来的UDP数据,当数据接收完成后要将这个端口释放,让别的客户端程序可以继续使用这个端口,现假设服务器的7000~8000范围内的端口可以动态的来分配,服务器应该用怎样的一个算法来实现上面的功能呢?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-09-19 14:53 |只看该作者
7000-8000不就是一个端口列表吗?

char port_list[1000]; 谁开谁没开, 随着bind/close去设置port_list不就行了? 记得setsockopt SO_REUSEADDR,  否则TIMEWAIT的是没法重用的.

但我必须给楼主提个醒:

1, bind(0)是可以由内核自动绑定到一个空闲port的, 但无法满足你的7000-8000需求.
2, 我知道你想做UDP server, 对于每一个client分配一个独立的udp socket(port)与client通信, 并且有一个唯一的UDP PORT作为类似监听socket的工作.
    所以,我必须提醒你,当你是用一个未bind的udp socket向对端发送第一个包时, 内核就帮你绑定了一个port, 所以你需要考虑7000-8000是否是必要的需求.
    再另外, udp一样可以connect, 对于udp是不发生任何实际网络传输的, 只是做一个本地socket的remote addr限制, 但实际有一个效果就是, 不需要发送任何包,
    就可以既限制remote addr(只能发给connect的remote, 只能接受remote发来的包), 又可以由内核帮你绑定一个端口.

论坛徽章:
0
3 [报告]
发表于 2012-09-24 08:53 |只看该作者
回复 2# linux_c_py_php


    最后还是用了bind(0)来分配端口,开始以为这种方法不行呢,后来又试了一下能满足我需求,谢谢了。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
4 [报告]
发表于 2012-09-24 11:48 |只看该作者
不客气, 理解这些关系即可.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP