1
我遇到了一些問題,recvfrom()沒有得到所有的數據包在C++中。 (然後阻止並不返回)recvfrom()沒有得到所有東西
我發送1個查詢包,然後發送響應。
它被分成多個805字節的數據包,然後以〜200字節的數據包結束。
從我的測試中,共收到54個數據包。
然而,我的程序總共只收到25-35個數據包,而不是結束數據包,儘管數據包似乎在WireShark中正常到達。
我的代碼可以在這裏看到:
sockaddr_in local, dest;
local.sin_family = AF_INET;
local.sin_port = htons(58770);
local.sin_addr.S_un.S_addr = INADDR_ANY;
dest.sin_family = AF_INET;
dest.sin_addr.S_un.S_addr = inet_addr(QUERYADDR);
dest.sin_port = htons(20810);
SOCKET s;
if((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
errex("socket() failed");
if(bind(s, (sockaddr*)&local, sizeof(local)) == -1)
errex("bind() failed!");
sendto(s, (const char*)QUERY, sizeof(QUERY), 0, (sockaddr*)&dest, sizeof(dest));
while(true)
{
sockaddr_in tsaddr;
char buf[8192];
int slcl = sizeof(tsaddr);
int res = recvfrom(s, buf, sizeof(buf), 0, (sockaddr*)&tsaddr, &slcl);
printf("%i\n", res);
}
closesocket(s);
WSACleanup();
有人能看到什麼錯?
這讓我想起曾經聽過的UDP笑話,但我從來沒有聽說過。 – 2011-12-16 20:06:47
當您使用TCP而不是UDP時,它看起來如何? – stacker 2011-12-16 20:26:16