[问题] 关于 Socket连线问题

楼主: tas72732002 (葱头)   2015-06-26 23:18:35
请问一下各位大大
当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
作者: popcorny (毕业了..@@")   2015-06-26 23:31:00
不是你理解错就是书写错,Server Port不会变一个socket由src ip/port, dest ip/socket tcp/udp区分server port不需要变就可以分辨不同socket
作者: ctrlbreak   2015-06-27 08:40:00
clinet连出去的port不会变, 变的是server
作者: popcorny (毕业了..@@")   2015-06-27 09:11:00
既然都用java了.. 就把socket toString()出来看吧
楼主: tas72732002 (葱头)   2015-06-27 09:32:00
server变了? 那client不用变吗
作者: ctrlbreak   2015-06-27 09:36:00
server接听时的port不变, 产生连线后会分一个新的port与client连线.client还是维持在建立连线时的port不会变.
作者: mars90226 (火星人)   2015-06-27 09:45:00
http://tinyurl.com/pjt798t client或server都不会变socket是看(socket ip/port, client ip/port)来决定每个client都会对应到不同socket
作者: andymai (人生只有一次)   2015-06-27 11:01:00
所谓的client就是主动连线吧,server就是收到后回复,如果双方找的门牌号码(port)不同了,那server和client的定义就不一样了吧...
作者: shaopin (Brian)   2015-06-27 13:47:00
以系统角度来说, 产生的是一个新的 file descriptor没有什么新的port, 旧的portJava 只是用抽象的方式把他包装起来, 称为一个新的socket我认为可能是你的书翻译有误或是你的理解有误server port 从头到尾都不会变

Links booklink

Contact Us: admin [ a t ] ucptt.com