Java 套接字关闭异常
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19557168/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Socket closed exception
提问by Abhilash
I wrote a simple server and client example as below .
我写了一个简单的服务器和客户端示例,如下所示。
Client :
客户 :
- Open a connection
- Get outputstream , write to stream and close the output stream
Get inputstream and read from the stream. Getting exception at this point
public class DateServer { public static void main(String[] args) throws InterruptedException { ServerSocket serverSocket = null; Socket client = null; try { serverSocket = new ServerSocket(6013); while (true) { client = serverSocket.accept(); OutputStream outputStream = client.getOutputStream(); InputStream inputStream = client.getInputStream(); System.out.println("" + outputStream + "-" + inputStream); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); String line = null; while ((line = bufferedReader.readLine()) != null) { System.out .println("Message recieved from client ::" + line); } PrintWriter printWriter = new PrintWriter(outputStream, true); printWriter.println(new java.util.Date().toString()); client.close(); } } catch (IOException exception) { exception.printStackTrace(); System.err.println(exception); } } }
- 打开连接
- 获取输出流,写入流并关闭输出流
获取输入流并从流中读取。此时出现异常
public class DateServer { public static void main(String[] args) throws InterruptedException { ServerSocket serverSocket = null; Socket client = null; try { serverSocket = new ServerSocket(6013); while (true) { client = serverSocket.accept(); OutputStream outputStream = client.getOutputStream(); InputStream inputStream = client.getInputStream(); System.out.println("" + outputStream + "-" + inputStream); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); String line = null; while ((line = bufferedReader.readLine()) != null) { System.out .println("Message recieved from client ::" + line); } PrintWriter printWriter = new PrintWriter(outputStream, true); printWriter.println(new java.util.Date().toString()); client.close(); } } catch (IOException exception) { exception.printStackTrace(); System.err.println(exception); } } }
Client :
客户 :
public class DateClient {
public static void main(String[] args) throws UnknownHostException,
IOException, InterruptedException {
Socket sock = new Socket("127.0.0.1", 6013);
OutputStream outputStream = sock.getOutputStream();
InputStream inputStream = sock.getInputStream();
System.out.println("" + outputStream + "-" + inputStream);
PrintWriter printWriter = new PrintWriter(outputStream, true);
printWriter.println("Hi Server");
outputStream.close();
System.out.println(sock.isConnected());
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(inputStream));
String line;
while ((line = bufferedReader.readLine()) != null) { // Exception
System.out.println(line);
}
}
}
Getting below socket closed exception in Client . Could you please let me know what would be the reason.
在 Client 中低于套接字关闭异常。你能告诉我是什么原因吗?
Exception in thread "main" java.net.SocketException: Socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:146)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:282)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:153)
at java.io.BufferedReader.readLine(BufferedReader.java:316)
at java.io.BufferedReader.readLine(BufferedReader.java:379)
at edu.iub.cs.httpserver.DateClient.main(DateClient.java:32)
回答by Todd Jefferson
java.net.SocketException socket is closed This exception means that you closed the socket, and then continued to try to use it.
java.net.SocketException socket is closed 这个异常意味着你关闭了socket,然后继续尝试使用它。
os.close();
And you closed it here. Closing either the input or the output stream of a Socket closes the other stream and the Socket.
你在这里关闭了它。关闭 Socket 的输入或输出流将关闭另一个流和 Socket。
回答by user3003435
java.net.SocketException
arises only when u close the OutputStream
(or) Socket before reading from the server.
java.net.SocketException
仅当您OutputStream
在从服务器读取之前关闭(或)套接字时才会出现。
From your code, remove:
从您的代码中删除:
OutputStream.close();
and then try..
然后尝试..