シンプルな C サーバーと Java クライアントがあります。サーバーからクライアントにテキストファイルを1行ずつ送信しています:
do {
send(sockfd, line, strlen(line), 0);
printf("%s\n", line);
} while ((fgets(line, 100, fp)) != NULL);
Javaクライアントで次のように読み取ります。
Client.getCl().getInputStream().read(inmsg);
do{
decoded = new String(inmsg, "UTF-8");
System.out.println(decoded);
}while(Client.getCl().getInputStream().read(inmsg) > 0);
私の問題は、サーバーからクライアントに「読み取り終了」を送信する方法がわからないことです。クライアントは最後の読み取りでフリーズします。methodeは、受信read()
バイト数を含む整数を返し、読み取るものが何もない場合は -1 を返し、バッファーの長さがゼロの場合は 0 を返すことを知っています。クライアントに -1 を返す唯一の解決策は、サーバー側でソケットを閉じることでしたが、それは使用できません。また、次のことを試しました:
1)送信メソッドの最後に長さ0を送信して、長さがゼロであることをクライアントに伝えます:
send(sockfd, NULL, NULL, 0);
2) フラグを定義して送信:
#define MSG_FIN 0x200
#define MSG_EOR 0x0080
そして再び両方のフラグで:
send(sockfd, NULL, NULL, MSG_FIN);
send(sockfd, NULL, NULL, MSG_EOR);
誰でも私がここで間違っていることを助けてください? ありがとう