我正在編寫服務器客戶端應用程序。客戶端通過不同的流向服務器發送某種數據。一旦我在主要方法中放置這樣的流,程序什麼都不做;也不例外只是空控制檯:通過套接字流式傳輸
try {
socket = new Socket("localhost", 4050);
din = new DataInputStream(socket.getInputStream());
oin = new ObjectInputStream(socket.getInputStream());
dout = new DataOutputStream(socket.getOutputStream());
} catch (UnknownHostException e) {
System.out.println("Exception: the host is unknown");
} catch (IOException e) {
System.out.println("I/O exception thrown by socket");
}
有一次,我從main方法的部分刪除此流oin = new ObjectInputStream(socket.getInputStream());
程序拋出EOFException類或連接復位異常。 上述代碼中的特殊之處在於,程序什麼都不做,並且不會引發異常?
一旦您將提到的流中的一個單獨的方法
private static MessageObject readObject(){
MessageObject mo = null;
try{
oin = new ObjectInputStream(socket.getInputStream());
mo = (MessageObject)oin.readObject();
}
catch(IOException e){
System.err.println(e.getCause());
}
catch(ClassNotFoundException e){
System.err.println(e.getCause());
}
return mo;
}
它拋出該異常:
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.DataInputStream.readBoolean(Unknown Source)
at Server.main(Server.java:77)
在服務器上它是在如果分支:
if (din.readBoolean()) {
ObjectInputStream oin = new ObjectInputStream(s.getInputStream());
MessageObject o = (MessageObject)oin.readObject();
// server saves the whole thing
MessageDB.add(o);
}
我不能在這裏放置我所有的代碼,這是我的任務。
ooops,抱歉的人,發現了錯誤。一些邏輯錯誤,服務器期待一些輸入,但客戶拒絕發送它。
究竟你在哪裏得到'EOFException'?看起來好像你沒有顯示整個代碼 – yegor256 2012-03-06 23:17:18
那麼,在代碼中沒有錯誤......所以這就解釋了爲什麼沒有發生這種情況。 – Jon 2012-03-06 23:17:20