1
我正在寫一個至少在局域網上用套接字播放的遊戲。我用4個字節長度的前綴,要知道在剩下多少數據是這樣的:靈活的套接字應用程序
void trust_recv(int sock, int length, char *buffer)
{
int recved = 0;
int justRecv;
while(recved < length) {
justRecv = recv(sock, buffer + recved, length - recved, 0);
if (justRecv < 0) return;
recved += justRecv;
}
}
void onDataArrival(int sock)
{
int length;
char *data;
trust_recv(sock, 4, (char *) &length);
data = new char[length];
trust_recv(sock, length, data);
do_somethings_with_data(data);
}
的問題是,如果有人(例如入侵者或黑客)發送的數據與其他格式(也許只有2個字節長度其餘的低於4字節的前綴值)或網絡問題,我的應用程序將轉到「無響應」狀態並且必須關閉(因爲我使用了阻塞套接字)。如何使我的套接字應用程序更加靈活,但不要將套接字轉換爲非阻塞模式來傳遞此問題? (或者任何關於組織數據或算法的想法)
'的sizeof(int)的'可能不是'4'。你應該使用'int32_t'和'sizeof(length)'來防止堆棧損壞。 –
@JamesMcLaughlin:謝謝,我會通知 –