前提・実現したいこと
CのプログラムからJavaのプログラムへ, ソケット通信で0か1の信号を送信したいのですが, Java側でエラーが発生しました。エラーの意味と解決方法がわからないので, 教えて下さい。
発生している問題・エラーメッセージ
java.io.EOFException at java.base/java.io.DataInputStream.readInt(DataInputStream.java:397) at Standard_assignment.acceptSocket(Standard_assignment.java:310) at Standard_assignment$MultiThread.run(Standard_assignment.java:297)
該当のソースコード
該当箇所だけ表記します。
C
1// ソケット通信 2void sock(int onof_flg){ 3 int sd; 4 struct sockaddr_in addr; 5 6 // IPv4 TCP のソケットを作成する 7 if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { 8 perror("socket"); 9 return -1; 10 } 11 12 // 送信先アドレスとポート番号を設定する 13 addr.sin_family = AF_INET; 14 addr.sin_port = htons(8888); 15 addr.sin_addr.s_addr = inet_addr("192.168.54.113"); 16 17 // サーバ接続(TCP の場合は、接続を確立する必要がある) 18 connect(sd, (struct sockaddr *)&addr, sizeof(addr)); 19 20 // パケットを TCP で送信 21 if(send(sd, onof_flg, 17, 0) < 0) { 22 perror("send"); 23 return -1; 24 } 25 26 close(sd); 27} 28 29/* 省略 */ 30 31onof_flg = ~onof_flg; 32sock(onof_flg);
Java
1class MultiThread extends Thread{ 2 public void run() { 3 acceptSocket(); 4 } 5 } 6 7 public void acceptSocket() { 8 try { 9 //アクセス待ち 10 Socket sock = svSock.accept(); 11 12 //受信ストリームの取得(DataInputStreamでラップ) 13 DataInputStream in = new DataInputStream(sock.getInputStream()); 14 15 //int型データを受信 16 intData = in.readInt(); 17 System.out.println("「"+intData+"」を受信しました。"); 18 19 //受信ストリームの終了 20 in.close(); 21 //サーバー終了 22 svSock.close(); 23 } 24 catch(IOException e){ 25 e.printStackTrace(); 26 } 27 } 28 29/* 省略 */ 30 31//ポート指定 32 try { 33 svSock = new ServerSocket(8888); 34 } 35 catch(IOException e){ 36 e.printStackTrace(); 37 } 38 39 while( true ){ 40 41 MultiThread mt = new MultiThread(); 42 mt.start();
回答2件
あなたの回答
tips
プレビュー