2011-11-12 121 views
3

我試圖寫一個客戶機/服務器程序,客戶端可以: *將一個字符串寫入服務器 *從服務器Java套接字:如何讀取/寫入對象和字符串?

,接收對象和服務器可以: *從客戶端 接收一個字符串*發送一個對象給客戶端。

不過,我迄今爲止的嘗試已經證明是徒勞的,我很沮喪。我確信我正在犯一個基本的缺陷,但是對於Socket編程來說,這是一件很新的事情,我只是無法知道我出錯的地方。

我的流選擇有什麼問題嗎?還是有更好的方式來使用我還沒有找到的流?

我送的對象序列化,儘管該對象不會被寫入/讀取的服務器掛在的readUTF()

預先感謝您的任何幫助。

//Used to receive a string input from client side 
DataInputStream input = new DataInputStream(clientSocket.getInputStream()); 
// Used to output an object to client side 
ObjectOutputStream oo = new ObjectOutputStream(clientSocket.getOutputStream()); 

// This is never executed.. 
clientInput = input.readUTF(); 
oo.writeObject(book); 

客戶端代碼:

 // Used to read object from server side 
     input = new ObjectInputStream(clientSocket.getInputStream()); 
     // Used to read input from command line 
     keyboard = new BufferedReader(new InputStreamReader(System.in)); 
     // Used to send string to server 
     output = new DataOutputStream(clientSocket.getOutputStream()); 

     cmdInput = keyboard.readLine(); 
     // Write to server, this executes at runtime. 
     output.writeUTF(cmdInput);        
     // Object is never sent, this line is not executed. 
     book = (Book)input.readObject(); 
+0

由於您使用ObjectInputStream和ObjectOutputStream,我假設您想使用TCP。你可以在你爲服務器和客戶端創建clientSocket的地方包含代碼嗎?您正在使用服務器的ServerSocket類,對嗎? –

+0

是的我正在使用ServerSocket服務器和客戶端的套接字。客戶端服務器連接工作正常,因爲我能夠簡單地傳遞字符串。這是當我添加對象功能,它開始打破。 – BodhiByte

+0

但是在你調用writeObject之前你的客戶端代碼被卡住了...... –

回答

0

一般情況下,你會使用web服務套件(例如Apache的CXF)比這樣做自己會更好。

具體而言,請嘗試在客戶端的輸出流上調用flush()

+0

我已經嘗試在客戶端調用flush,它沒有做任何改變。另外,對於這個問題,我只適合在JDK庫中開發。 – BodhiByte

+0

在java 1.6中,JDK中有一個完整的Web服務工具包。 – bmargulies