當我構建一個客戶端 - 服務器聊天程序時,我遇到了一個非常奇怪的問題(因爲它總是在以前工作)。服務器接受套接字,但之後套接字不能接收任何東西
serversocket毫無問題地接受客戶端的傳入連接,但是當我試圖從套接字的輸入流讀取時,整個方法阻塞並且只有在關閉客戶端套接字時纔會釋放。
我甚至用docs.oracle.com上的示例代碼嘗試過它,但問題依然存在。
任何人都可以指出我顯然沒有看到的錯誤嗎?
服務器代碼:
public class Server {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
System.out.println("Creating server socket");
ServerSocket internetSocket = new ServerSocket(60000);
if(!internetSocket.isClosed()) {
while(true) {
Socket s = internetSocket.accept();
System.out.println("accepted socket!");
BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
}
}
客戶機代碼:
public class Client {
public static void main(String[] args) throws IOException {
Socket s = null;
try {
s = new Socket("localhost", 60000);
} catch (UnknownHostException ex) {
Logger.getLogger(Start2.class.getName()).log(Level.SEVERE, null, ex);
}
PrintWriter outStream = new PrintWriter(s.getOutputStream());
for(int i=0; i<10; i++) {
outStream.println("test");
System.out.println("Sending the message \"test\"");
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(Start2.class.getName()).log(Level.SEVERE, null, ex);
}
}
s.close();
}
}
對不起,但我不能接受這兩個答案;-)我剛剛在PrintWriter中看到了額外的構造函數參數。我想我的代碼寫得太快了。 Anywayz也感謝你指出它! – Tom 2013-04-24 20:29:38