我正在尝试编写一个客户端/服务器程序,客户端可以在其中: *写一个字符串到服务器 *从服务器接收对象
并且服务器可以: *从客户端收到一个字符串 *将对象发送给客户端。
然而,到目前为止,我的尝试都没有结果,我感到非常沮丧。我确信我正在制造一个根本性的缺陷,但对于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 :(得分:0)
一般情况下,最好使用网络服务工具包(例如Apache CXF),而不是自己动手。
具体而言,尝试在客户端的输出流上调用flush()
。