前提・実現したいこと
Cから送られた"a"という文字をJava側で受け取ったら, JavaからCに"y"という文字を送り返すプログラムを作っていますが, うまく動作しません.
Java
1public void Socket_ONOFF() { 2 try { 3 BufferedReader reader = null; 4 String line = null; 5 6 //アクセス待ち 7 Socket sock = svSock.accept(); 8 9 //受信ストリームの取得 10 reader = new BufferedReader(new InputStreamReader(sock.getInputStream())); 11 12 // 送信ストリームの取得 13 OutputStream out = sock.getOutputStream(); 14 15 line = reader.readLine(); 16 System.out.println(line); 17 18 if(line.equals("a")) { 19 System.out.println("a is received"); 20 //Socket_notice(); 21 char y='y'; 22 out.write(y); 23 out.flush(); 24 System.out.println(y+"を送信しました。"); 25 detection=false; 26 } 27 out.close(); 28 reader.close(); 29 sock.close(); 30 } 31 catch(IOException e) { 32 e.printStackTrace(); 33 } 34 }
C
1void sock_write(int onof_flg){ 2 int sd; 3 char *b; 4 struct sockaddr_in addr; 5 6 // IPv4 TCP のソケットを作成する 7 if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { 8 perror("socket"); 9 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.100.1"); 16 17 // サーバ接続(TCP の場合は、接続を確立する必要がある) 18 connect(sd, (struct sockaddr *)&addr, sizeof(addr)); 19 20 if(send(sd, "a", 1, 0) < 0) { 21 perror("send a"); 22 } 23 24 int rsize; 25 rsize = recv( sd, &b, sizeof(b), 0); 26 27 if (rsize == 0) { 28 } 29 else if ( rsize == -1 ) { 30 perror( "recv" ); 31 } 32 else { 33 if(strncmp(b, "y", 1)==0){ 34 printf("y is returned"); 35 sleep(1); 36 } 37 } 38 39 close(sd); 40} 41
エラー
recv: Connection reset by peer
試したこと
C
1int rsize; 2rsize = recv( sd, &b, sizeof(b), 0); 3
この部分をコメントアウトすると"a"が問題なく送信されるので, JavaからCへ文字を送信する際に問題が発生しているのだと思います.
回答1件
あなたの回答
tips
プレビュー