2014-01-07 75 views
0

我正在研究Java流, 在服務器端,我試圖通過objectOutputStream發送int並在客戶端接收它。但是,我沒有收到任何客戶端。Java Socket - 通過對象流傳遞int?

這裏是服務器側發送INT

public static int PLAYER1 = 1; 
new ObjectOutputStream(player1.getOutputStream()).writeInt(PLAYER1); 

這裏是在客戶端側接收INT:

fromServer = new ObjectInputStream(socket.getInputStream()); 

這裏就是我測試收到的int部分:

int player = fromServer.readInt(); 
if(player == PLAYER1){ 
System.out.println("yy working"); 
}else{ 
    System.out.println("not working"); 
} 

問題是,我沒有得到一個錯誤,也沒有系統出來.. 我正在使用ObjectStreams而不是DataStreams,因爲某些原因。

+0

這些片段建議您爲每條消息創建新的流。不要這樣做。最好是浪費,最壞的情況下不會工作。在套接字的生命週期中使用相同的流。 – EJP

回答

0

呼叫close()flush()

public static int PLAYER1 = 1; 
ObjectOutputStream oos = new ObjectOutputStream(player1.getOutputStream()); 
oos.writeInt(PLAYER1); 

oos.flush(); 

// OR 

oos.close(); 

flush()將派已經寫入到客戶端的數據。這將使您可以重複使用oos

如果您不需要oos,請致電close()。調用close()將清除尚未發送的數據。

+0

非常感謝。這真的有效:) – m1alesis

+0

@ user3170763不客氣;) – Stephan

0

您的代碼似乎無法通過呼叫int player = fromServer.readInt();。我會在readInt()或之前調試調用,以查看它跳出的位置。在服務器端

+0

謝謝,是的,你是對的..不得不使用flush(); ;) – m1alesis