1

こんにちは、私は最近 UDP ソケットのプログラミングを開始し、ローカル ネットワーク上のあらゆる種類のものにそれらを使用しています。しかし、素敵なファイアウォールの外にUDPパケットを送信する方法については何も見つけられないようです.

UDPソケットをバインドするために使用するコードは次のとおりです

int handle = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( (unsigned short) /* port */);
bind( handle, (const sockaddr*) &address, sizeof(sockaddr_in) )

そして、ここに私がパケットを送信するために使用するコードがあります

sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl( /*local network IP Address*/ );
address.sin_port = htons( (unsigned short) /* port */ );

sendto( handle, (const char*)/* packet data */, size, 0, (sockaddr*)&address, sizeof(sockaddr_in) );

最後に、パケットを受信するために使用するコードを次に示します。

sockaddr_in from;
socklen_t fromLength = sizeof( from );

int received_bytes = recvfrom( handle, (char*)data, size, 0, (sockaddr*)&from, &fromLength );
4

1 に答える 1

2

UDP は「接続されていない」データ送信方法であるため、ルーターのファイアウォールにルールを追加して、ポートを (データを受信することになっているコンピューターに) ルーティングするようにする必要があります。

問題はコードからではなく、ネットワーク インフラストラクチャから発生します。

于 2013-10-26T16:31:27.510 に答える