Ich habe ein Problem mit Sendto-Funktion. Ich möchte Zeit vom UDP-Server bekommen. Mein Code wie folgt aus:Sendto Funktion zurück Fehler - UDP-Socket auf Windows
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;
}
Meine Ausgabe ist wie:
sendto:: No error
sendto failed with error: 10013
Wenn ich recive Daten mit recv versuchen, habe ich etwas falsch gemacht. Ich möchte Zeit von UDP-Server auf Windows mit C++ bekommen. Wo ist das Problem? Warum ein Fehler sagt keinen Fehler und einen Fehler 10013 und wie kann ich das beheben?
Nicht verwandt mit Ihrem Problem, aber Sie wissen, dass der Wert "010" ist nicht * Dezimal * zehn? Es ist oktal und hat den Dezimalwert "8". –
Sie sollten das Ergebnis von 'inet_addr' überprüfen und Sie sollten lesen [seine Dokumentation] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms738563 (v = vs.85) .aspx) . (Hinweis: Das ist keine Funktion zum Auflösen von Host-Namen.) – molbdnilo