Befunden UDP -Sockets Daten in unterschiedliche Nachrichten oder lesen Sie in so vielen Daten wie möglich auf einmal?C++

Programme in C++. Entwicklerforum
Anonymous
 Befunden UDP -Sockets Daten in unterschiedliche Nachrichten oder lesen Sie in so vielen Daten wie möglich auf einmal?

Post by Anonymous »

Nehmen wir an, ich habe eine Absenderanwendung und eine Empfängeranwendung, die über UDP kommuniziert. Zuerst sende ich diese 15 Bytes: < /p>

Code: Select all

[MYHEADER]hello< /code> < /p>

...Womer danach sende ich noch weitere 15 Bytes: < /p>

[MYHEADER]world< /code> < /p>

Jetzt höre ich in der Empfängeranwendung denselben Port mit einem UDP -Socket an, der an dieselbe Adresse gebunden ist. Nehmen wir an, beide Nachrichten sind seit dem letzten Mal eingetroffen (und in derselben Reihenfolge). Abfragen des Sockets für eingehende Daten jeden Frame: < /p>

uint32 PendingSize;
while (Socket->HasPendingData(PendingSize))
{
uint32 BytesRead;
uint8 MessageData[kMaxMessageSize];

if (Socket->Recv(MessageData, kMaxMessageSize, BytesRead))
{
// Do stuff here
// Will BytesRead be equal to PendingSize?
}
}
< /code>

HasPendingData
wickelt einen Anruf an ioctlsocket mit Fionread zurück, wobei die Daten im Empfangspuffer warten, und PendingSize mit der Anzahl der Bytes. Recv ruft recv auf, um diese Daten in einen Puffer zu lesen, den ich lesen kann. Wenn es zutreffend zurückgibt, antworte ich auf die Daten, die ich erhalten habe. < /P>

Hier ist meine Frage. Welche dieser Szenarien reflektiert genau, was in dieser Situation passieren würde? < /P>

Option a.
  • Code: Select all

    HasPendingData
    gibt true zurück und zeigt eine ausstehende Größe von 15 Bytes an. Recv gibt mir die meldung [myheader] Hallo .
  • Code: Select all

    HasPendingData
    gibt true zurück und zeigt eine ausstehende Größe von 15 Bytes an. Recv gibt mir die meldung [myheader] world .
  • Code: Select all

    HasPendingData
    Gibt false zurück.
Option b. />
[*]

Code: Select all

HasPendingData
gibt true zurück und zeigt eine ausstehende Größe von 30 Bytes an. Recv gibt mir die meldung [myheader] Hallo [myheader] world .
HasPendingData< /code> Gibt false zurück. Danke!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post