我在嘗試從客戶端將數據發送回服務器(可能被看作是一種POST,雖然我不使用http)時得到了java.io.EOFException
。ObjectInputStream#readObject拋出java.io.EOFException
我的客戶端源代碼:
Socket clientSocket = new Socket(serverIpAddr, IConstant.ServerPort);
OutputStream out = clientSocket.getOutputStream();
out.write(dataByteArray);
out.flush();
if(out!=null)
out.close();
if(clientSocket!=null)
clientSocket.close();
我的服務器源代碼:
try{
ServerSocket serverSocket = new ServerSocket(IConstant.ServerPort);
while(true)
{
Socket connectionSocket = serverSocket.accept();
ObjectInputStream ois = new ObjectInputStream(connectionSocket.getInputStream());
Object obj = ois.readObject();
byte[] bytes = (byte[])obj;
System.out.println("A notification has been received");
//process bytes
//...
}
} catch(IOException ex){
ex.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
這我如何建立我dataByteArray
對象(其中PlayList
是實現java.io.Serializable一個POJO) :
private byte[] serializePlayList(PlayList playList) throws IOException{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] byteArray = null;
ObjectOutput out = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(playList);
out.flush();
byteArray = bos.toByteArray();
} finally {
try {
bos.close();
} catch (IOException ex) {
}
}
return byteArray;
}
每當服務器嘗試執行ois.readObject()
,java.io.EOFException
被拋出。任何人都可以解釋爲什麼?
你寫了一個簡單的輸出流,而是從對象輸入流中讀取。爲什麼不寫入對象輸出流?或者,你如何構建'dataByteArray'以確保它是一個完整的對象圖? –
@Andy:我已更新我的線程並添加了用於構建dataByteArray對象的方法 –
您確定客戶端正在寫入數組,而不是拋出異常嗎? –