[問題] ServerSocket 接收瀏覽器連線

看板java作者 (Mr. Pan)時間13年前 (2012/06/29 17:05), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串1/1
先針對上面我問的問題做一個小結 (#1Fx9G3PQ) 這幾篇主題雖然是問 wait 和 notify 可不可以做到 某件事,經過我實際測試之後是OK 沒問題(那表示當初想法沒錯XD) 問題是出在連線,也就是 ServerSocket ------------------- [底下有 demo 的原始碼] 先敘述一下我的 Server: while(true){ socket=serverSocket.accept(); ClientHandler client=new ClientHandler(socket); client.start(); } // ClientHandler 是自己寫的 extends Thread class. Client 的部分則是直接使用瀏覽器(chrome,firefox...) 我在 ClientHandler 的 run 裡面用了 wait(); 來暫停 : public void run(){ // blablabla synchronized(this){wait();} //blablabla } 理論上不影響主執行緒對吧?(serverSocket 的部分) 而當某見實情發生的時候,我會對所有的 client thread 進行 notify 這個部分也沒有問題(實測過了) 現在測試的情況有底下三種: 1. 一台電腦 用瀏覽器開兩個連線 連到這個 Server (不論瀏覽器是否相同都一樣) 都要等到第一個 client thread 結束後第二個才會被 serverSocket accept 2. 一台電腦 用 Java 的 URL openConnection , 連到 server 不論開幾條連線,都能順利的被 server accept,並且進入他們各自的 client thread 而且 wait(); 3. 兩台電腦 各用瀏覽器開一條連線 到 Server 兩個連線都順利的被 accept , 並進入自己的 thread wait. 就我所認知的,第一個情況很奇怪... 有沒有人遇過 或者是知道這有可能是甚麼原因嗎? 任何只要是透過瀏覽器的,同一台電腦都只有第一個連線會被 accept.. 我把我的 class 簡化,做成 demo 版 (只有 source code , 請自行編譯XD) http://www.mediafire.com/download.php?h8m0k14cvn5myyq 啟動 server 之後五秒內 用同一台電腦瀏覽器連兩次 http://localhost:8888/ 以及用不同電腦各連一次 (五秒內) 觀察 console 出現的訊息。 接著可以把 sleep 時間調長,以及同電腦不同瀏覽器連,結果也一樣。 裡面有附兩張圖,分別是我用 同電腦 Chrome , Firefox 五秒內各連一次 以及 電腦連一次,手機連一次(五秒內) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.39.75

06/29 18:30, , 1F
如果用兩種不同的瀏覽器連結呢? 例如IE + FOX?
06/29 18:30, 1F

06/29 20:06, , 2F
同一個瀏覽器開的兩個連線對Server來說是同一個session
06/29 20:06, 2F

06/30 01:15, , 3F
不同瀏覽器也是後面那條會卡住@@
06/30 01:15, 3F
※ 編輯: darkk6 來自: 118.171.117.163 (06/30 02:13)

06/30 02:13, , 4F
補上 demo source code , 可以參考看看
06/30 02:13, 4F
文章代碼(AID): #1FxM_oL0 (java)