[問題] ServerSocket.accept() 回傳 new socket?
我在學習撰寫 server 端程式,
使用了 ServerSocket.accept(5000) 來接受連線。
為了想知道 accept() 後回傳的連線 socket ,
其本地端的 port 在哪,我撰寫了 Server端程式 (如下)。
Server端 程式碼:
ss = new ServerSocket(5000);
sock = ss.accept();
System.out.println("connected !");
System.out.println("sock.toString() : " + sock.toString());
接著在本機上,用 Client端 連線至 Server端,
Server端 輸出結果:
connected !
sock.toString() : Socket[addr=/127.0.0.1,port=53835,localport=5000]
其中出現的 53835的port 我想應該是 client 端的 port,
另一個看敘述像是新socket的本地 port,可是怎麼還是在 5000 ?
我看api,說 accept() 會回傳 new socket,
看 HeadFirst Java,說 accept() 會回傳一個新的 socket (在不同的port上),
但事實讓我感到很困惑,請問我的觀念上是否有問題?
敬請各位指正,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.34.173.223
推
11/25 21:46, , 1F
11/25 21:46, 1F
→
11/25 21:53, , 2F
11/25 21:53, 2F
我用了兩台電腦,server 的那台,
System.out 上的 sock.toString() 輸出,localport 還是在 5000上。
不過後來我去 stack overflow 翻文章,也有人提到類似的問題,
結論也 "沒有" new socket 一定要開在不同 port 上的說法。
看來我是太相信書了,深入淺出 HeadFirst Java (2nd ed) p.483 上,
說回傳的 socket 會在不同的 port上,但事實並非一定如此。
→
11/26 03:16, , 3F
11/26 03:16, 3F
呵呵,總算翻到關於 p.483 的討論串
http://stackoverflow.com/questions/4307549/serversocket-accept-method?rq=1
應該是 HeadFirst Java 寫錯了。
※ 編輯: clairelune 來自: 1.34.173.223 (11/26 04:11)
→
11/26 09:49, , 4F
11/26 09:49, 4F
推
11/26 21:25, , 5F
11/26 21:25, 5F
→
11/26 21:27, , 6F
11/26 21:27, 6F
→
11/26 21:28, , 7F
11/26 21:28, 7F