Ali*_*aka 1 java sockets inputstream outputstream tcpsocket
我正在向正确传递的服务器发送消息.
但是,当试图读取结果时,我得到一个例外Socket is closed.
知道如何关闭套接字的输出流同时保持套接字和套接字的输入流打开以获得结果吗?
客户代码:
Socket socket = new Socket("localhost", 9090);
String message = "Some message";
new OutputStreamWriter(socket.getOutputStream(), Charsets.UTF_8)
.append(message)
.close();
// The following line throws the exception when socket.getInputStream() is called:
String fromServer = CharStreams.toString(new InputStreamReader(socket.getInputStream(), Charsets.UTF_8));
Run Code Online (Sandbox Code Playgroud)
例外:
java.net.SocketException: Socket is closed
at java.net.Socket.getInputStream(Socket.java:903)
at alik.server.test.Client.pingServer(Client.java:24)
Run Code Online (Sandbox Code Playgroud)
来自javadocSocket.getOutputStream():
关闭返回的
OutputStream将关闭相关的套接字.
换句话说,在完成输入流之前,请不要关闭输出流.关闭输入流也将关闭套接字(因此也会关闭输出流).
您可以使用Socket.shutdownOutput()以防止进一步写入套接字,但我真的没有看到使用它的意义,它可能导致对等体提前关闭其套接字,正如Stephen C在评论中解释的那样:
只有在读取时,对等体才应该看到封闭的流.接下来会发生什么取决于它如何响应看到封闭的流.
| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |