作者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/m.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