0

A が B にサイズ N の UDP メッセージを送信するとします。

sockaddr_in to;
to.sin_family=AF_INET;
to.sin_port=htons(port);
to.sin_addr.s_addr=inet_addr(address);
sendto(sock,(const char*)buffer,N,0,(sockaddr*)&to,sizeof(to));

B は、サイズが N_1 であることを期待してこのメ​​ッセージを受け取ります。

sockaddr from;
socklen_t length_from=sizeof(from);
recvfrom(sock,(char*)buffer,N_1,0,&from,&length_from);

N_1!=N の場合はどうなりますか?

4

1 に答える 1

1

N_1!=N の場合はどうなりますか?

受信バッファが着信データグラムよりも大きい場合、データグラム全体がバッファに転送され、実際の長さが recfvrom() の戻り値として返されます。あなたは現在それを無視しています。そうしないでください。

受信バッファが着信データグラムよりも小さい場合、受信バッファに収まるように切り捨てられ、それを超えた部分は破棄されます。バッファに転送されたデータの実際の長さが返されます。

于 2014-07-19T07:53:33.597 に答える