UDP ブロードキャスト経由でバイナリ データを受信するクライアント アプリケーションを C++ で作成していますが、バッファ サイズに関係なく、最初の 4 バイトを超えるデータを受信できません。Wireshark でパケットを確認したところ、マシンが約 1200 バイトのデータを受信していることがわかります。これをクライアントが受信しているものと比較すると、パケットを取得していることがわかりますが、残りのデータは失われています。これが私のコードです:
#define BUFFERSIZE 4096
int main()
{
struct addrinfo hints, *servinfo, *p;
int sockfd, i, nbyt;
int *buf = (int*) malloc(BUFFERSIZE);
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, "9011", &hints, &servinfo);
sockfd = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol);
bind(sockfd, servinfo->ai_addr, servinfo->ai_addrlen);
FILE *file;
file = fopen("file.txt", "w+");
for (i=0;i<=45;i++)
{
nbyt = recv(sockfd, buf, BUFFERSIZE, 0);
fprintf(file, "%s %d; %s %x\n", "Bytes received:", nbyt, "Message:", *buf);
}
fclose(file);
close(sockfd);
free(buf);
printf("%s\n", "Execution ended.");
return 0;
}
私が受け取っているデータの例:
Bytes received: 1131; Message: 5b0
Bytes received: 1131; Message: 5b3
Bytes received: 1131; Message: 5b6
Bytes received: 1092; Message: 4e0
MSG_DONTWAIT
同様のPythonアプリケーションの問題を修正したため、フラグを使用してソケットを非ブロックに設定しようとしましたが、これはエラーのみを返します:
Bytes received: -1; Message: 0
私は C++ とソケットに比較的慣れていないので、私が見ていないものがある可能性があります。うまくいけば、誰かが何が問題なのかを理解するのを手伝ってくれますか? 必要に応じて追加情報を提供できます。