看板 java 關於我們 聯絡資訊
請問一下各位大大 當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://www.ptt.cc/bbs/java/M.1435331917.A.E55.html
popcorny: 不是你理解錯就是書寫錯,Server Port不會變 06/26 23:31
popcorny: 一個socket由src ip/port, dest ip/socket tcp/udp區分 06/26 23:33
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
ctrlbreak: clinet連出去的port不會變, 變的是server 06/27 08:40
popcorny: 既然都用java了.. 就把socket toString()出來看吧 06/27 09:11
※ 編輯: tas72732002 (114.34.181.227), 06/27/2015 09:12:37
tas72732002: server變了? 那client不用變嗎 06/27 09:32
ctrlbreak: server接聽時的port不變, 產生連線後會分一個新的port 06/27 09:36
ctrlbreak: 與client連線. 06/27 09:36
ctrlbreak: client還是維持在建立連線時的port不會變. 06/27 09:40
mars90226: http://tinyurl.com/pjt798t client或server都不會變 06/27 09:45
mars90226: socket是看(socket ip/port, client ip/port)來決定 06/27 09:45
mars90226: 每個client都會對應到不同socket 06/27 09:46
andymai: 所謂的client就是主動連線吧,server就是收到後回覆,如 06/27 11:01
andymai: 果雙方找的門牌號碼(port)不同了,那server和client的定 06/27 11:01
andymai: 義就不一樣了吧... 06/27 11:01
shaopin: 以系統角度來說, 產生的是一個新的 file descriptor 06/27 13:47
shaopin: 沒有什麼新的port, 舊的port 06/27 13:47
shaopin: Java 只是用抽象的方式把他包裝起來, 稱為一個新的socket 06/27 13:48
shaopin: 我認為可能是你的書翻譯有誤或是你的理解有誤 06/27 13:48
shaopin: server port 從頭到尾都不會變 06/27 13:49