通常、任意のサイズのパケットを送信する場合、最大値が確立され、受信バッファのサイズとして使用されます。この擬似的な例では受信パケットの実際のサイズを取得する
#include <winsock2.h>
// Socket Description
// Hint.ai_family = AF_INET;
// Hint.ai_socktype = SOCK_DGRAM;
// Hint.ai_protocol = IPPROTO_UDP;
void Send(int Size)
{
char *Data = (char *)malloc(Size);
sendto(Socket, Data, Size, NULL, Result->ai_addr, Result->ai_addrlen)
}
void Receive()
{
const unsigned int MaxDataSize = 1436;
char *Data = (char *)malloc(MaxDataSize);
recvfrom(Socket, Data, MaxDataSize, 0, (SOCKADDR*)&RecvAddr, &RecvAddrSize);
}
が、関係なく、データのサイズがSend()
に渡され、私たちのReceive()
関数は常に定義された最大サイズでそれを取得します。
どのようにして元の送信パケットサイズを確認できますか?
あなたはどんな種類のソケットなのか、より多くのコンテキストを提供する必要がありますか?あなたが送るデータのサイズは?そしてあなたは 'sendto'と' recvfrom'の結果をチェックしますか?また、これはC++とはほとんど関係がありません(あるいは 'malloc'の代わりに' new'を使用するでしょう)ので、タグを更新してください。タグのスパムは怒られます。 –
* recvfrom()*](http://linux.die.net/man/2/recvfrom)の[* man * page]に相談したことはありますか? – EJP
'recvfrom'はパケットのサイズを返します。 – immibis