以下のような簡単なサーバーとクライアントの例を書きました。
クライアント:
Inputstreamを取得し、ストリームから読み取ります。この時点で例外を取得する
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 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);
}
}
}
クライアントでソケットクローズ例外を下回っています。その理由を教えてください。
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)
Java.net.SocketExceptionソケットが閉じていますこの例外は、ソケットを閉じた後、引き続き使用を試みたことを意味します。
os.close();
そして、あなたはそれをここで閉じました。ソケットの入力または出力ストリームを閉じると、他のストリームとソケットが閉じます。
Java.net.SocketException
は、サーバーから読み取る前にOutputStream
(または)ソケットを閉じた場合にのみ発生します。
コードから、以下を削除します。
OutputStream.close();
してみて.