免费注册 查看新帖 |

Chinaunix

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

[C++] TCP长连接服务端,监听多个端口和一个端口有什么区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-03 09:19 |只看该作者 |倒序浏览
TCP长连接服务端,分两种情况。
一种是服务端监听多个端口(每个客户端连接一个);
一种是服务端监听一个端口(每个客户端都连接)
这两种方式的区别在哪里?
是不是服务端ACCEPT之后系统会分配新的端口,那样的话,第一种方式也就是没有必要的么?

论坛徽章:
0
2 [报告]
发表于 2013-09-03 09:26 |只看该作者
这种说法不科学啊?
只记得监听一个端口 每个客户端都连接这个...
Accept后,只是对sock的fd文件操作描述而已.貌似跟端口木有关系了的吧.
至于一个APP监听多个端口可以的,但是一般都是为了管理啊,检测区分用户和管理连接的.

论坛徽章:
0
3 [报告]
发表于 2013-09-03 09:42 |只看该作者
短连接的时候我就是按照你说的这么理解的。
但是到了长连接我就抓瞎了。

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
4 [报告]
发表于 2013-09-03 10:25 |只看该作者
回复 1# nameofhsw
第一种方法没有必须,Accept之后系统不会分配新端口,TCP连接可以由一个四元组唯一的识别(local ip,local port,remote ip,remote port)。不同客户端,不同的连接(remote ip和remote port)总是不同的,客户端连接的端口是动态分配的在客户端本机不会重复,那么通过这个四元组完全可以区别任何连接。

   

论坛徽章:
0
5 [报告]
发表于 2013-09-03 10:32 |只看该作者
回复 4# myworkstation
额,那么服务端可以使用同一端口建立多个长连接?


   

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
6 [报告]
发表于 2013-09-03 10:34 |只看该作者
回复 5# nameofhsw


    服务器的连接属于被动连接,所以一个端口完全可以有多个连接,客户端的连接是主动连接每个连接都有一个端口,如果服务器有一个连接主动连接到别的服务器那么这个连接也会有一个随机端口。建议你去看看TCP/IP的基础知识。

论坛徽章:
0
7 [报告]
发表于 2013-09-03 11:10 |只看该作者
= =
看了,只是不理解,就想以前短链接都没这么想过,这次一到长连接就想不通了。

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
8 [报告]
发表于 2013-09-03 11:22 |只看该作者
源IP 源端口 目标IP 目标端口,这四者就唯一确定了一条TCP/UDP链路。

客户端链接服务端,相当于固定了目标IP和目标端口,故只要各个客户端IP不同、或者虽然IP相同但端口不同,就可以区分每一条链接。
这就是一台http服务器只打开一个80端口,却可以同时为上万人(甚至更多)服务的原因。


在服务端,端口号是为了区分不同的服务。比如一台http服务器,网页服务就放80端口;后台管理要ssh登录,就用22端口;ftp下载用21端口……


说的更深一些:事实上,更底层的IP协议并不包含端口号。(不考虑特殊情况)目标为同一个IP的所有TCP/UDP包,最终都会进入同一块网卡;然后,再由上层协议栈依据包头部的目标端口号dispatch给bind在相应端口的文件描述符,这才能被打开这个文件描述符的服务程序拿到(对TCP包或调用了connect的UDP包,还会进一步按照 源IP 源端口 目标IP 目标端口 这个四元组,dispatch到更细分的某个文件描述符中[用accept打开],这就是所谓的链路)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP