Java套接字:如何读/写对象和字符串?

时间:2011-11-12 22:32:53

标签: sockets object stream

我正在尝试编写一个客户端/服务器程序,客户端可以在其中:   *写一个字符串到服务器   *从服务器接收对象

并且服务器可以:   *从客户端收到一个字符串   *将对象发送给客户端。

然而,到目前为止,我的尝试都没有结果,我感到非常沮丧。我确信我正在制造一个根本性的缺陷,但对于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();

1 个答案:

答案 0 :(得分:0)

一般情况下,最好使用网络服务工具包(例如Apache CXF),而不是自己动手。

具体而言,尝试在客户端的输出流上调用flush()