gpt4 book ai didi

c++ - Winsock UDP 文件发送错误 10040

转载 作者:行者123 更新时间:2023-11-28 03:13:38 39 4
gpt4 key购买 nike

这是我的发送程序。

#pragma once
#pragma comment(lib,"Ws2_32.lib")

#include <WinSock2.h>
#include <Windows.h>
#include <iostream>

using namespace std;

int main()
{
WSAData wsaData;
WORD DllVersion = MAKEWORD(2,2);
int startup_RetVal = WSAStartup(DllVersion, &wsaData);

SOCKET sSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

SOCKADDR_IN addr;

addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_family = AF_INET;
addr.sin_port = htons(22222);

char buf[200000] = "AR*REF=";

int send_RetVal = sendto(sSocket, buf, 200000, NULL, (SOCKADDR*)&addr, sizeof(addr));
if(send_RetVal == SOCKET_ERROR)
{
cout <<" An error occured " << WSAGetLastError() << endl;
getchar();
}

return 0;
}

我收到 WSAEMSGSIZE (10040) 错误。

目标是通过 udp 发送一个 100Kbytes 的文件。有人告诉我 .NET 上的类似错误是这样解决的:

IPHostEntry^ IPHostTV;

IPEndPoint^ send_tv_ip;

Socket^ UDPSendTV;

int PortSendTV;
System::String^ IPSend;



send_tv_ip =
gcnew IPEndPoint(IPHostTV->AddressList[0], PortSendTV);

UDPSendTV =
gcnew Socket(send_tv_ip->Address->AddressFamily, SocketType::Dgram, ProtocolType::Udp);

//Increasing buffer and timeout
UDPSendTV->SendTimeout = 1000;
UDPSendTV->SendBufferSize = 100000;

UDPSendTV->SendTo(buff1, 0, size1, SocketFlags::None, send_tv_ip);

如何修改我的套接字以使其正常工作?

最佳答案

UDP 上的消息大小受 UDP header 中 16 位消息大小字段的协议(protocol)限制为 ~64KB。没有解决方法。

(嗯,除了每个协议(protocol)单元发送多条消息)。

关于c++ - Winsock UDP 文件发送错误 10040,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637672/

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