我写了一个简单的服务器和客户端的例子如下。套接字关闭异常
客户:
- 打开一个连接
- 获取的OutputStream,写入流并关闭输出流
获取InputStream和从流中读取。
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); } } }
获得以下插座闭合异常的客户:在这一点上
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); } } }
客户端获取异常。请让我知道是什么原因。
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)
但是'的System.out.println(sock.isConnected());'是印刷真实 – Abhilash
@Abhilash无关。 'isConnected()'告诉你是否曾经连接过'Socket.' *** Not ***它是否已经连接。 ('isConnected()'和'isClosed()'方法关于* socket的状态,*不是连接的状态。) – EJP