sendto関数に問題があります。私はUDPサーバーから時間を得たいです。このような私のコード:sendto関数がエラーを返す - ウィンドウ上のUDPソケット
unsigned char msg[48]={010,0,0,0,0,0,0,0,0};
char* hostname=(char *)"tick.usno.navy.mil";
sockaddr_in server_addr;
WSAData data;
int result=WSAStartup(MAKEWORD(2, 2), &data);
if (result != NO_ERROR) {
printf("WSAStartup failed with error: %d\n", result);
return 1;
}
int client_s = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP);
if (client_s == INVALID_SOCKET) {
printf("socket failed with error: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
unsigned short Port = 123;
server_addr.sin_family = AF_INET; // Address family to use
server_addr.sin_port = htons(Port); // Port num to use
server_addr.sin_addr.s_addr = inet_addr(hostname); // IP address to use
char out_buf[BUFFER_SIZE];
int retcode = sendto(client_s, reinterpret_cast<const char*>(msg), sizeof(msg), 0,(struct sockaddr *)&server_addr, sizeof(server_addr));
perror("sendto:");
if (retcode == SOCKET_ERROR) {
printf("sendto failed with error: %d\n", WSAGetLastError());
closesocket(client_s);
WSACleanup();
return 1;
}
私の出力は以下のようである:私はRECVとreciveデータをしようとすると
sendto:: No error
sendto failed with error: 10013
、私は間違って何かを得ました。私は、C + +のWindows上でUDPサーバーから時間を取得したい。ここで問題はどこですか?なぜ1つのエラーがエラーと1つのエラー10013と言って、どうすればそれを修正できますか?
あなたの問題とは関係ありませんが、値 '010'は* decimal * tenではないことがわかりますか?これは8進数で、10進値は「8」です。 –
'inet_addr'の結果を確認し、[そのドキュメント](https://msdn.microsoft.com/en-us/library/windows/desktop/ms738563(v=vs.85).aspx)を読むべきです。 。 (ヒント:それはホスト名を解決するための機能ではありません) – molbdnilo