UDP経由で着信するネットワークブロードキャストを聞く必要があります。データグラムにはj4cDAC_broadcast
構造体が含まれています。私はいくつかのチュートリアルに従ってみましたが、それらはいくつかのことを省略しているようで、もしあれば、非常に詳細な説明がありません。
私が今持っているもので私はBIND FAILED 10049
エラーを受け取ります、そしてエラー10049はアドレスが利用できないことを示します。放送は255.255.255.255:7654に来ています。このエラーを修正するにはどうすればよいですか?
これは私がこれまでに持っているものです:
void test()
{
WSADATA wsd;
SOCKET s;
j4cDAC_broadcast recieve;
char *read = (char*) malloc(sizeof(j4cDAC_broadcast));
int ret;
DWORD dwSenderSize;
sockaddr_in local;
if (WSAStartup(MAKEWORD(2,2),&wsd) != 0)
{
cout << "WSAStartup failed";
exit(1);
}
local.sin_family = AF_INET;
local.sin_port = htons ((short)BCASTPORT);
local.sin_addr.s_addr = inet_addr(BCASTIP);
s = socket(AF_INET, SOCK_DGRAM, 0 );
if (s == INVALID_SOCKET)
{
cout << "SOCKET FAILED!: " << WSAGetLastError();
exit(1);
}
int bnd = bind(s,(SOCKADDR*) &local,sizeof(local) );
if (bnd != 0 )
{
cout << "BIND FAILED: " << WSAGetLastError(); //fails here
return;
}
ret = recv (s, read,sizeof(j4cDAC_broadcast),0);
if (ret == SOCKET_ERROR)
{
cout << "RECIEVE FAILED " << WSAGetLastError();
return;
}
memcpy(&recieve,read,sizeof(read));
closesocket(s);
WSACleanup();
}
また、私が見つけられなかったもう1つのことは、ヘッダーから送信者のIPアドレスを取得する方法でした。