gpt4 book ai didi

c++ - recvfrom()没有得到一切

转载 作者:太空宇宙 更新时间:2023-11-04 14:19:46 26 4
gpt4 key购买 nike

我在使用 recvfrom() 时遇到一些问题,无法在 C++ 中获取所有数据包。 (然后阻塞不返回)

我发送了 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();

谁能看出有什么不对?

最佳答案

最可能的解释是数据包被丢弃在线路的某处。 Wireshark 只是告诉您数据包在线路上,而不是它们已被接收器正确接收。

尝试检查接收器上的 SO_RCVBUF 套接字选项以确保它没有被溢出(这将导致数据包丢失),并检查您的网络驱动程序是否有任何错误或其他问题的迹象。

关于c++ - recvfrom()没有得到一切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8539437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com