JavaからCのプログラムにソケット通信で文字を送信したいのですが, C側で正常に受け取りができていないのかread関数で動作が停止します.
該当のソースコード
Java
1public void Socket_test() { 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 17 if(line.equals("a")) { 18 System.out.println("a is received"); 19 char y='y'; 20 out.write(y); 21 out.flush(); 22 System.out.println("「"+y+"」を送信しました。"); 23 } 24}
C
1void sock_notice(void){ 2 int sd; 3 struct sockaddr_in addr; 4 char buf; 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 // パケットを TCP で送信 21 if(send(sd, "a", 1, 0) < 0) { 22 perror("send a"); 23 } 24 25 // 受信 26 if(read(sd, &buf, 1, 0) < 0) { 27 perror("read buf"); 28 } 29 30 if(strcmp(&buf,'y')){ 31 printf("y\n"); 32 } 33 else{ 34 printf("n\n"); 35 } 36 37 close(sd); 38}
補足
受信の箇所(read関数)でCのソースコードがフリーズしているので, 受信ができているのかも不明です.
また, この状態でCのソースコードを強制終了した瞬間に"a is received" 「y」を送信しました。" がJavaのコンソールに出力されました.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/16 08:45