質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Q&A

0回答

585閲覧

Javaのソケットの接続切れの判定のlocalhostとそうでない場合の違い

yukiend

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

0グッド

0クリップ

投稿2020/08/09 00:23

編集2020/08/09 21:20

質問

大学の課題でJAVAのサーバ・クライアントプログラムを作成しています。
サーバとクライアントの接続切れの判定について、理解の難しい挙動があったため質問いたします。このような挙動がなぜ起こるのかをご教授いただきたいです。

java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4import java.io.PrintWriter; 5import java.net.Socket; 6import java.net.UnknownHostException; 7 8public class SimpleClient { 9 10 public static void main(String[] args) { 11 Socket s; 12 try { 13 s = new Socket("localhost", 10000);//パソコン2台のときは"localhost"を"192.168."から始まるプライベートIPアドレスに 14 PrintWriter out = new PrintWriter(s.getOutputStream(), true); 15 InputStreamReader sisr = new InputStreamReader(s.getInputStream()); 16 BufferedReader br_in = new BufferedReader(sisr); 17 BufferedReader br_out = new BufferedReader(new InputStreamReader(System.in), 1); 18 while(true) { 19 System.out.println("サーバへの入力"); 20 out.println(br_out.readLine()); 21 //System.out.println("サーバからの出力"); 22 //System.out.println(br_in.readLine()); 23 } 24 25 } catch (UnknownHostException e) { 26 // TODO 自動生成された catch ブロック 27 e.printStackTrace(); 28 } catch (IOException e) { 29 // TODO 自動生成された catch ブロック 30 e.printStackTrace(); 31 } //サーバ(ipAddress, port)に接続 32 33 34 } 35 36}

上記のようなクライアントプログラムと、以下のようなサーバプログラムで、br.readLine()IOExceptionを投げるかどうかでクライアントとの接続切れを判定していました。

java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4import java.net.ServerSocket; 5import java.net.Socket; 6 7public class Servertest { 8 public static void main(String[] args){ 9 ServerSocket ss; 10 try { 11 ss = new ServerSocket(10000); 12 Socket socket = ss.accept(); 13 InputStreamReader sisr = new InputStreamReader(socket.getInputStream()); 14 BufferedReader br = new BufferedReader(sisr); 15 while(true) {// データを受信し続ける 16 String inputLine; 17 inputLine = br.readLine(); 18 System.out.println(inputLine); 19 } 20 } catch (IOException e1) { 21 // TODO 自動生成された catch ブロック 22 e1.printStackTrace(); 23 } 24 } 25 26}

しかし、一つのパソコンでサーバとクライアントのプログラムを起動したときはうまくいったのですが、サーバとクライアントを別のパソコンで起動したときは**br.readLine()**が例外を投げずに、nullを返してそのまま処理が続行してしまいました。

発生している問題・エラーメッセージ

localhostで実行した場合は、クライアントのコマンドプロンプトでctrl+Cを押して、クライアントプログラムを終了すると、以下のように例外を投げます

java.net.SocketException: Connection reset at java.base/java.net.SocketInputStream.read(SocketInputStream.java:186) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) at java.base/java.io.InputStreamReader.read(InputStreamReader.java:185) at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) at server.Servertest.main(Servertest.java:19)

しかしながら、2台のパソコンの時は、上記のように例外が投げられず、nullが無限ループで表示されました。
どうして、このような挙動になるのか教えていただけると幸いです

補足情報(FW/ツールのバージョンなど)

サーバとクライアントを同じパソコンの時は
サーバ:windows(Eclipse、openjdk11)
クライアント:windows(コマンドプロンプト、openjdk11)
サーバとクライアントを別のパソコンにしたときは
サーバ:windows(Eclipse、openjdk11)
クライアント:Mac(ターミナル、java 14.0.2)
で、Wifiのローカルネットワークで通信しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2020/08/09 03:55

JavaのバージョンとOSのバージョン、使用したサーバー/クライアントの正確なコードとパケットキャプチャした結果がないと分かりませんが、↑のサーバーコードをコンパイルできるようにしたものをUbuntu19.10のOpenJDK付属JRE(11)で動かしたところ、telnet 127.0.0.1 9000で]押して^D押して切っても、エラーにはなりませんでした。普通にならない気がします。むしろルーターなどを経由した方がエラーになりそうに思いました。大学の講義でそうなったなら、先生か詳しい人に聞いたら喜んで教えてくれるように思います。
coco_bauer

2020/08/09 07:16

1つのパソコンでサーバとクライアントの両方を実行した場合、接続切れはクライアントの停止によって起こしたのですか? その際、サーバ側で挙がった例外は何でしたか? 何が起きたのかに興味があります。
yukiend

2020/08/09 22:03

質問を編集しました。 なにか、分かることがあれば教えてください。
dameo

2020/08/10 00:03

上記環境での実行結果 ■クライアント $ java SimpleClient サーバへの入力 123 サーバへの入力 123 サーバへの入力 123 サーバへの入力 ^C $ ■サーバー(nullが返ったらbreakするように変更はしてますが、基本挙動は同じです) $ java Servertest 123 123 123 null $ ■パケットキャプチャ結果(wireshark) No. Time Source Destination Protocol Length Info 1 0.000000000 127.0.0.1 127.0.0.1 TCP 74 51296 → 10000 [SYN] Seq=0 Win=65495 Len=0 MSS=65495 SACK_PERM=1 TSval=1550385073 TSecr=0 WS=128 Frame 1: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 51296, Dst Port: 10000, Seq: 0, Len: 0 No. Time Source Destination Protocol Length Info 2 0.000013846 127.0.0.1 127.0.0.1 TCP 74 10000 → 51296 [SYN, ACK] Seq=0 Ack=1 Win=65483 Len=0 MSS=65495 SACK_PERM=1 TSval=1550385073 TSecr=1550385073 WS=128 Frame 2: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 51296, Seq: 0, Ack: 1, Len: 0 No. Time Source Destination Protocol Length Info 3 0.000024166 127.0.0.1 127.0.0.1 TCP 66 51296 → 10000 [ACK] Seq=1 Ack=1 Win=65536 Len=0 TSval=1550385073 TSecr=1550385073 Frame 3: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 51296, Dst Port: 10000, Seq: 1, Ack: 1, Len: 0 No. Time Source Destination Protocol Length Info 4 2.019107473 127.0.0.1 127.0.0.1 TCP 70 51296 → 10000 [PSH, ACK] Seq=1 Ack=1 Win=65536 Len=4 TSval=1550387092 TSecr=1550385073 Frame 4: 70 bytes on wire (560 bits), 70 bytes captured (560 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 51296, Dst Port: 10000, Seq: 1, Ack: 1, Len: 4 Data (4 bytes) 0000 31 32 33 0a 123. No. Time Source Destination Protocol Length Info 5 2.019121068 127.0.0.1 127.0.0.1 TCP 66 10000 → 51296 [ACK] Seq=1 Ack=5 Win=65536 Len=0 TSval=1550387092 TSecr=1550387092 Frame 5: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 51296, Seq: 1, Ack: 5, Len: 0 No. Time Source Destination Protocol Length Info 6 2.936228478 127.0.0.1 127.0.0.1 TCP 70 51296 → 10000 [PSH, ACK] Seq=5 Ack=1 Win=65536 Len=4 TSval=1550388009 TSecr=1550387092 Frame 6: 70 bytes on wire (560 bits), 70 bytes captured (560 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 51296, Dst Port: 10000, Seq: 5, Ack: 1, Len: 4 Data (4 bytes) 0000 31 32 33 0a 123. No. Time Source Destination Protocol Length Info 7 2.936239539 127.0.0.1 127.0.0.1 TCP 66 10000 → 51296 [ACK] Seq=1 Ack=9 Win=65536 Len=0 TSval=1550388009 TSecr=1550388009 Frame 7: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 51296, Seq: 1, Ack: 9, Len: 0 No. Time Source Destination Protocol Length Info 8 3.762072607 127.0.0.1 127.0.0.1 TCP 70 51296 → 10000 [PSH, ACK] Seq=9 Ack=1 Win=65536 Len=4 TSval=1550388835 TSecr=1550388009 Frame 8: 70 bytes on wire (560 bits), 70 bytes captured (560 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 51296, Dst Port: 10000, Seq: 9, Ack: 1, Len: 4 Data (4 bytes) 0000 31 32 33 0a 123. No. Time Source Destination Protocol Length Info 9 3.762082766 127.0.0.1 127.0.0.1 TCP 66 10000 → 51296 [ACK] Seq=1 Ack=13 Win=65536 Len=0 TSval=1550388835 TSecr=1550388835 Frame 9: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 51296, Seq: 1, Ack: 13, Len: 0 No. Time Source Destination Protocol Length Info 10 4.761737559 127.0.0.1 127.0.0.1 TCP 66 51296 → 10000 [FIN, ACK] Seq=13 Ack=1 Win=65536 Len=0 TSval=1550389834 TSecr=1550388835 Frame 10: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 51296, Dst Port: 10000, Seq: 13, Ack: 1, Len: 0 No. Time Source Destination Protocol Length Info 11 4.765142263 127.0.0.1 127.0.0.1 TCP 66 10000 → 51296 [FIN, ACK] Seq=1 Ack=14 Win=65536 Len=0 TSval=1550389838 TSecr=1550389834 Frame 11: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 51296, Seq: 1, Ack: 14, Len: 0 No. Time Source Destination Protocol Length Info 12 4.765156990 127.0.0.1 127.0.0.1 TCP 66 51296 → 10000 [ACK] Seq=14 Ack=2 Win=65536 Len=0 TSval=1550389838 TSecr=1550389838 Frame 12: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 51296, Dst Port: 10000, Seq: 14, Ack: 2, Len: 0
dameo

2020/08/10 00:27

Windows10Home64bit OpenJDK11のJREで同じことを実施 ■クライアント >java SimpleClient サーバへの入力 123 サーバへの入力 123 サーバへの入力 123 サーバへの入力 サーバへの入力 > ■サーバー(nullが返ったらbreakするように変更はしてますが、基本挙動は同じです) >java Servertest 123 123 123 null java.net.SocketException: Connection reset at java.base/java.net.SocketInputStream.read(Unknown Source) at java.base/java.net.SocketInputStream.read(Unknown Source) at java.base/sun.nio.cs.StreamDecoder.readBytes(Unknown Source) at java.base/sun.nio.cs.StreamDecoder.implRead(Unknown Source) at java.base/sun.nio.cs.StreamDecoder.read(Unknown Source) at java.base/java.io.InputStreamReader.read(Unknown Source) at java.base/java.io.BufferedReader.fill(Unknown Source) at java.base/java.io.BufferedReader.readLine(Unknown Source) at java.base/java.io.BufferedReader.readLine(Unknown Source) at Servertest.main(Servertest.java:17) > ■パケットキャプチャ結果(wireshark) No. Time Source Destination Protocol Length Info 1 0.000000 127.0.0.1 127.0.0.1 TCP 118 49588 → 10000 [SYN] Seq=0 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM=1 Frame 1: 118 bytes on wire (944 bits), 66 bytes captured (528 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 49588, Dst Port: 10000, Seq: 0, Len: 0 No. Time Source Destination Protocol Length Info 2 0.000052 127.0.0.1 127.0.0.1 TCP 118 10000 → 49588 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM=1 Frame 2: 118 bytes on wire (944 bits), 66 bytes captured (528 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 49588, Seq: 0, Ack: 1, Len: 0 No. Time Source Destination Protocol Length Info 3 0.000080 127.0.0.1 127.0.0.1 TCP 94 49588 → 10000 [ACK] Seq=1 Ack=1 Win=2619648 Len=0 Frame 3: 94 bytes on wire (752 bits), 54 bytes captured (432 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 49588, Dst Port: 10000, Seq: 1, Ack: 1, Len: 0 No. Time Source Destination Protocol Length Info 4 3.325985 127.0.0.1 127.0.0.1 TCP 104 49588 → 10000 [PSH, ACK] Seq=1 Ack=1 Win=2619648 Len=5 Frame 4: 104 bytes on wire (832 bits), 59 bytes captured (472 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 49588, Dst Port: 10000, Seq: 1, Ack: 1, Len: 5 Data (5 bytes) 0000 31 32 33 0d 0a 123.. No. Time Source Destination Protocol Length Info 5 3.326013 127.0.0.1 127.0.0.1 TCP 94 10000 → 49588 [ACK] Seq=1 Ack=6 Win=2619648 Len=0 Frame 5: 94 bytes on wire (752 bits), 54 bytes captured (432 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 49588, Seq: 1, Ack: 6, Len: 0 No. Time Source Destination Protocol Length Info 6 4.605652 127.0.0.1 127.0.0.1 TCP 104 49588 → 10000 [PSH, ACK] Seq=6 Ack=1 Win=2619648 Len=5 Frame 6: 104 bytes on wire (832 bits), 59 bytes captured (472 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 49588, Dst Port: 10000, Seq: 6, Ack: 1, Len: 5 Data (5 bytes) 0000 31 32 33 0d 0a 123.. No. Time Source Destination Protocol Length Info 7 4.605683 127.0.0.1 127.0.0.1 TCP 94 10000 → 49588 [ACK] Seq=1 Ack=11 Win=2619648 Len=0 Frame 7: 94 bytes on wire (752 bits), 54 bytes captured (432 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 49588, Seq: 1, Ack: 11, Len: 0 No. Time Source Destination Protocol Length Info 8 5.966431 127.0.0.1 127.0.0.1 TCP 104 49588 → 10000 [PSH, ACK] Seq=11 Ack=1 Win=2619648 Len=5 Frame 8: 104 bytes on wire (832 bits), 59 bytes captured (472 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 49588, Dst Port: 10000, Seq: 11, Ack: 1, Len: 5 Data (5 bytes) 0000 31 32 33 0d 0a 123.. No. Time Source Destination Protocol Length Info 9 5.966454 127.0.0.1 127.0.0.1 TCP 94 10000 → 49588 [ACK] Seq=1 Ack=16 Win=2619648 Len=0 Frame 9: 94 bytes on wire (752 bits), 54 bytes captured (432 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 49588, Seq: 1, Ack: 16, Len: 0 No. Time Source Destination Protocol Length Info 10 8.385741 127.0.0.1 127.0.0.1 TCP 106 49588 → 10000 [PSH, ACK] Seq=16 Ack=1 Win=2619648 Len=6 Frame 10: 106 bytes on wire (848 bits), 60 bytes captured (480 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 49588, Dst Port: 10000, Seq: 16, Ack: 1, Len: 6 Data (6 bytes) 0000 6e 75 6c 6c 0d 0a null.. No. Time Source Destination Protocol Length Info 11 8.385773 127.0.0.1 127.0.0.1 TCP 94 10000 → 49588 [ACK] Seq=1 Ack=22 Win=2619648 Len=0 Frame 11: 94 bytes on wire (752 bits), 54 bytes captured (432 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 10000, Dst Port: 49588, Seq: 1, Ack: 22, Len: 0 No. Time Source Destination Protocol Length Info 12 8.720402 127.0.0.1 127.0.0.1 TCP 94 49588 → 10000 [RST, ACK] Seq=22 Ack=1 Win=0 Len=0 Frame 12: 94 bytes on wire (752 bits), 54 bytes captured (432 bits) on interface \Device\NPF_{BCE10C50-02E9-4B1F-8AB1-5ECE779CEFF9}, id 0 Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1 Transmission Control Protocol, Src Port: 49588, Dst Port: 10000, Seq: 22, Ack: 1, Len: 0
dameo

2020/08/10 00:29

■サーバーコード import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Servertest { public static void main(String[] args){ ServerSocket ss; try { ss = new ServerSocket(10000); Socket socket = ss.accept(); InputStreamReader sisr = new InputStreamReader(socket.getInputStream()); BufferedReader br = new BufferedReader(sisr); while(true) {// データを受信し続ける String inputLine; inputLine = br.readLine(); System.out.println(inputLine); if (inputLine == null) break; } } catch (IOException e1) { // TODO 自動生成された catch ブロック e1.printStackTrace(); } } } インデントは消えてると思うけど、1行追加しただけです。
dameo

2020/08/10 00:37

結果から分かることは、WindowsだとコンソールからCtrl+Cしたときにまず標準入力からnullが返って、それを"null"って送った後に(というか多分最中に)ぶちぎる形でプロセスを終了しようとして、コネクションを慌てて切ったため、プロトコル的にはRESETになったんだと思います。
yukiend

2020/08/10 08:08

つまり、これはwindowsのコマンドプロンプト特有の現象で、自分のサーバのような実装は一般的な接続切れには対応していないという理解でよいでしょうか? また、一般的な接続切れの検知は、サーバとクライアントで定期的に情報を送るという方法しかないのでしょうか?
dameo

2020/08/10 08:15

多分いろいろなケースがあって、そうなるように設計することも出来るのかもしれません。 ただ今回のサーバの切断検出ロジックが万能ではないことは間違いありません。 ただ仕組みを理解することなく結論だけ聞くのは学生さんとしてはどうかと思いますよ。あと最初に書いたように先生とかに聞きましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問