Normalerweise wird beim Senden von beliebig großen Paketen ein Maximum festgelegt und als die Größe Ihres Empfangspuffers verwendet.Erhalten Sie die tatsächliche Größe des empfangenen Pakets
#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);
}
In diesem Pseudo-Beispiel, unabhängig von der Größe der Daten zu Send()
vergangen, unsere Receive()
Funktion wird es immer mit der maximalen Größe definiert.
Wie kann man die ursprüngliche Größe der gesendeten Pakete feststellen?
Sie müssen mehr Kontext bereitstellen, wie welche Art von Socket ist es? Wie groß sind die Daten, die Sie senden? Und überprüfen Sie das Ergebnis von 'sendto' und' recvfrom'? Außerdem hat dies nichts mit C++ zu tun (oder Sie würden 'new' anstelle von' malloc' verwenden), also aktualisieren Sie bitte die Tags. Tag Spamming ist verpönt. –
Haben Sie in Betracht gezogen, die [* man * Seite für * recvfrom() *] (http://linux.die.net/man/2/recvfrom) zu konsultieren? – EJP
'recvfrom' gibt die Größe des Pakets zurück ... – immibis