看板 java 關於我們 聯絡資訊
※ 引述《Gitangan (周大貓)》之銘言: : 不好意思還不是很懂2位板友的解說= = : 我再把我的server的程式碼貼上, : 目前程式一直卡住中.. 請不要問怎麼改,大家討論一下問題點。 先不管程式細節,看 client/server 程式大體上的流程。 [Client site] socket = new Socket(servername, port); // 下面這個 statement 會導致 serialization stream header 送到 server site outstream = new ObjectOutputStream(socket.getOutputStream()); // ObjectInputStream constructor 會 block 住直到 server site 送來 // serialization stream header instream = new ObjectInputStream(socket.getInputStream()); [Server site] ss = new ServerSocket(port); ServerStart.socket = t.socket = ss.accept(); // 等待 client 送來 serialization stream header,沒問題可收到,不會 block 住 instream = new ObjectInputStream(t.socket.getInputStream()); // server 程式會 block 在這裡直到 client 以 writeUTF method 送過來一字串, // 但是 client 程式在建構 ObjectInputStream 時就 block 住,沒有(也不再)送出 // 任何數據到 server site,所以 server 程式會一直停在這裡,沒有機會建構 // ObjectOutputStream,那麼 client site 無法收到 serialization stream header // 而一直停住,於是 client/server 程式皆陷在一直等待對方送數據過來的狀態 message = instream.readUTF(); if (message.equals("/bye")) { outstream = new ObjectOutputStream(socket.getOutputStream()); outstream.writeUTF(message); ... } else { outstream = new ObjectOutputStream(socket.getOutputStream()); outstream.writeUTF(message); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.135.215 ※ 編輯: sbrhsieh 來自: 218.173.135.215 (12/25 00:07) ※ 編輯: sbrhsieh 來自: 218.173.135.215 (12/25 00:08)
Gitangan:我就是因為SERVER端順序弄錯所以造成block現象... 12/25 00:11