[問題] 關於 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