私は以下のような単純なサーバーとクライアントの例を書いています。ソケットクローズ例外
クライアント:
- オープン接続
- 、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.'に接続したかどうかを知らせます。***接続されているかどうかは***ではありません。 ( 'isConnected()'と 'isClosed()'メソッドは、接続の状態ではなく*ソケットの状態に関するものです。) – EJP