目的: 私のコードはソケットを作成してクライアントからパッケージを受け取ることです(このクライアントは500msごとにメッセージをブロードキャストします)。 現象: ソケットがホストソケットとして作成されると、revfrom()を直接使用するとrevfrom関数から-1が返されます。しかし、sendto()関数をパケットとともに使用すると、revfrom()をすぐに使用してください。これは必要なパケットを見つけるのに役立ちます。それは、クライアントソケットのように見えますが、私はそれをサーバーソケットとして作成しました。 は私のコードです。ありがとうございます。 コード:UDPソケットrevfrom()戻りエラー
SOCKET s;
sockaddr_in addrDest;
sockaddr_in addrLocal;
int result;
char udp_buff[AMP_MAX_PACKET_SIZE];
WSADATA wsaData;
wchar_t msgbuf[100];
int addrDestSize = sizeof(SOCKADDR_IN);
// initialize winsock
result = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (result != NO_ERROR) {
wprintf(L"WSAStartup failed with error: %d\n", result);
//return 1;
}
// create the socket
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // UDP socket
u_long iMode = 1;
result = ioctlsocket(s, FIONBIO, &iMode);
if (result != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", result);
addrLocal.sin_family = AF_INET;
addrLocal.sin_port = htons(16717);
addrLocal.sin_addr.s_addr = htonl(INADDR_ANY); // zero-init sin_addr to tell it to use all available adapters on the local host
// associate this socket with local UDP port 16717
result = bind(s, (struct sockaddr*)&addrLocal, sizeof(addrLocal));
addrDest.sin_family = AF_INET;
addrDest.sin_port = htons(16717);
inet_pton(AF_INET, "192.168.99.255", &(addrDest.sin_addr));
uint8_t node_address_temp[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //array
std::vector<uint8_t> node_address(node_address_temp, node_address_temp + sizeof(node_address_temp)/sizeof(uint8_t));
//formatDataPack("MID", dataPack, node_address);
//SendCMDToGauge(&s, &dataPack, &addrDest);
result = sendto(s, " ", strlen(" ") + 1, 0, (SOCKADDR *)&addrDest, sizeof(addrDest));
result = -1;
while (result < 0) {
result = recvfrom(s, (char*)&udp_buff, sizeof(udp_buff), 0, (SOCKADDR *)&addrDest, &addrDestSize);
//result = recv(s, (char*)&udp_buff, sizeof(udp_buff), 0);
swprintf(msgbuf, 100, L"Revfrom Result: %d\n", result);
OutputDebugString(msgbuf);
Sleep(500);
if (result = 36)
result = -1;
}
正直なところ、私はどのように定義するのかは分かりません。私のアプリケーションでは、私のPCはネットワーク上のWi-Fiデバイスと話をし、ダイスが絶えず送信するパケットからMACアドレスを取得する必要があります。後でPCからフォーマットされたパックを送信することでこのデバイスを制御します。アプリケーションから、私はそれがサーバーだと思いますか? – Jacob
"ホストソケット"、 "クライアントソケット"、 "サーバーソケット"の違いは何だと思いますか?コードの振る舞いに何らかの影響を及ぼすタイプの2種類(あるいは多分3種類)のソケットについて話しているようです。私はあなたがこれらの言葉によって何を意味するのか分かりません。 「クライアントソケット」とは何ですか? –
私が間違った言葉を使うと私は許します。これらの用語にかかわらず、基本的にrecfrom()を使ってネットワークからデータを受け取る方法を理解しようとしています。 – Jacob