我设置了一个客户端和服务器套接字 . 当我使用类ObjectOutputStream和ObjectInputStream以及方法readObject / writeObject时,一切正常 .
它模拟与机器人的通信,我知道肯定只能解释方法DataOutputStream.writeBytes .
因此,我 Build 了新的仿真架构,因为机器人不能每天进行测试 .
在下面的代码中,ObjectOutputStream / ObjectInputStream将readObject / writeObject替换为DataInputStream / DataOutputStream writeBytes和IOutils.toByteArray . 服务器套接字正确接收消息,但当它尝试回写响应时,我得到一个损坏的管道,好像连接已在某处关闭 . 请注意,我从不关闭套接字或流,因为机器人甚至可以在30秒后回答 . 任何帮助使DataOutputStream.writeBytes工作将不胜感激 .
这是非工作代码:
客户:
Socket serverSocket = new Socket("server", 9899);
DataOutputStream outputStream = new DataOutputStream(serverSocket.getOutputStream());
//ObjectOutputStream outputStream = new ObjectOutputStream(serverSocket.getOutputStream());
//outputStream.writeObject("\n" + "message" + "\r");
outputStream.writeBytes("\n" + "message" + "\r");
outputStream.flush();
DataInputStream inputStream = new DataInputStream(serverSocket.getInputStream());
//ObjectInputStream inputStream = new ObjectInputStream(serverSocket.getInputStream());
byte [] bytes = IOUtils.toByteArray(inputStream);
String serverResponse = new String(bytes,"UTF-8");
// String serverResponse = (String)inputStream.readObject();
服务器:
ServerSocket serverSocket = new ServerSocket(9899);
while (true) {
Socket socket = serverSocket.accept();
//ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
byte [] bytes = IOUtils.toByteArray(inputStream);
String message = new String(bytes,"UTF-8");
//String message = (String) inputStream.readObject();
Thread.sleep(15000);
//ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream());
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
//outputStream.writeObject("server response");
outputStream.writeBytes("server response"); //EXCEPTION THROWN HERE FOR BROKEN PIPE
outputStream.flush();
}
谢谢你的时间
1 回答
IOUtils.toString(InputStream)必须读取流直到其结束,这意味着对等方已断开连接 . 所以你不能写信给它 .
如果要与数据流交换字符串,则应使用writeUTF()和readUTF() .
或者使用BufferedReader / Writer读写行 .