我寫了一個簡單的服務器和客戶端的例子如下。套接字關閉異常
客戶:
- 打開一個連接
- 獲取的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