作者tas72732002 (葱头)
看板java
标题[问题] 关於 Socket连线问题
时间Fri Jun 26 23:18:35 2015
请问一下各位大大
当Server 建立完成ServerSocket後 , 会产生一个socket来Listen
是否有Client 想要进行连线. 假设这时有Client进行连线,
Server会配置一个新的socket物件, 根据书上所说,
此时server也会使用一个新的port(非Listen port)与Client进行连线,
也就是"说Listen port与连线後实际和Client互动的port 是不同的" ?
如果这样, 能如果有100个Client进行连线,
那Server就必须使用100 port来进行服务, 加上Listen的Port为101个 ~
我好奇的是, 假设Client的防火墙挡住了新产生了port, 那不是不能连线了吗?
是我误解了吗 ?
请参考这张socket示意图 : ppt.cc/8cra3
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.34.181.227
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1435331917.A.E55.html
1F:→ popcorny: 不是你理解错就是书写错,Server Port不会变 06/26 23:31
2F:→ popcorny: 一个socket由src ip/port, dest ip/socket tcp/udp区分 06/26 23:33
3F:→ popcorny: server port不需要变就可以分辨不同socket 06/26 23:33
※ 编辑: tas72732002 (114.34.181.227), 06/27/2015 00:40:13
※ 编辑: tas72732002 (114.34.181.227), 06/27/2015 00:45:04
4F:推 ctrlbreak: clinet连出去的port不会变, 变的是server 06/27 08:40
5F:→ popcorny: 既然都用java了.. 就把socket toString()出来看吧 06/27 09:11
※ 编辑: tas72732002 (114.34.181.227), 06/27/2015 09:12:37
6F:→ tas72732002: server变了? 那client不用变吗 06/27 09:32
7F:推 ctrlbreak: server接听时的port不变, 产生连线後会分一个新的port 06/27 09:36
8F:→ ctrlbreak: 与client连线. 06/27 09:36
9F:→ ctrlbreak: client还是维持在建立连线时的port不会变. 06/27 09:40
11F:→ mars90226: socket是看(socket ip/port, client ip/port)来决定 06/27 09:45
12F:→ mars90226: 每个client都会对应到不同socket 06/27 09:46
13F:推 andymai: 所谓的client就是主动连线吧,server就是收到後回覆,如 06/27 11:01
14F:→ andymai: 果双方找的门牌号码(port)不同了,那server和client的定 06/27 11:01
15F:→ andymai: 义就不一样了吧... 06/27 11:01
16F:→ shaopin: 以系统角度来说, 产生的是一个新的 file descriptor 06/27 13:47
17F:→ shaopin: 没有什麽新的port, 旧的port 06/27 13:47
18F:→ shaopin: Java 只是用抽象的方式把他包装起来, 称为一个新的socket 06/27 13:48
19F:→ shaopin: 我认为可能是你的书翻译有误或是你的理解有误 06/27 13:48
20F:→ shaopin: server port 从头到尾都不会变 06/27 13:49