0

これは私の送信プログラムです。

#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 経由で 100K バイトのファイルを送信することです。.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);

ソケットが正しく動作するようにソケットを変更するにはどうすればよいですか?

4

1 に答える 1

2

UDP を介したメッセージ サイズは、UDP ヘッダーの 16 ビット メッセージ サイズ フィールドにより、プロトコルによって最大 64KB に制限されます。回避策はありません。

(ただし、プロトコル単位ごとに複数のメッセージを送信する場合を除きます)。

于 2013-07-14T08:30:41.193 に答える