2016-04-05 30 views
0

服務器:服務器/客戶端套接字和ObjectOutputStream的

Socket client_socket = server_back_end.server_socket.accept(); //1. 

    ClientInfo new_client = new ClientInfo(
    new ObjectOutputStream(client_socket.getOutputStream()), //writer 
    new ObjectInputStream(client_socket.getInputStream()), //reader 
    "blah, about to be re-written" 
); 

new_client.user_name = (String) new_client.reader.readObject(); //3. "bob" 
//new_client.user_name = new_client.reader.readLine(); //this doesnt work either 

System.out.println("Client " + new_client.user_name + " has connected."); 

客戶:

Socket client_socket = new Socket(); 
client_socket.connect(new InetSocketAddress(server_ip, server_port), 500); 
client_front_end.display("<<Connection Successful.>>\n"); 

String user_name = txtfield.getText(); //"bob" 

client = new ClientInfo(
    new ObjectOutputStream(client_socket.getOutputStream()), //writer 
    new ObjectInputStream(client_socket.getInputStream()), //reader 
    user_name); 

client.writer.writeChars(client.user_name); //2. 

我第一次運行服務器代碼。當我通過服務器端的調試器時,「// 1」。執行並等待客戶端連接。

然後我運行客戶端代碼。我期望發生的是「// 2」。應該叫「// 3」。在服務器代碼中,選取名稱並打印出用戶已連接的名稱。但是 ObjectOutputStream.writeChars(client.user_name)不會觸發服務器中的讀取。我究竟做錯了什麼?我的目標是使用這些ObjectOutput/ObjectInput流成功打印來自客戶端的名稱

回答

1

您正在讀取一個對象,但您並未寫入對象。你在寫字。 readObject()只能讀取writeObject()的輸出。 readInt()只能讀取writeInt()的輸出。等等。

+0

我理解你說的這個概念,但是我不是在寫一個字符串,然後讀取一個被轉換爲字符串的對象嗎?或者你是指別的東西? –

+0

更新了原帖以反映我嘗試的另一件事 –

+0

我只能重複。如果你想用readObject()來讀取,你必須用'writeObject()'來寫入。 – EJP