UDP-Datenübertragung
-
Hallo,
ich hab ein kleines Programm eines UDP-Clients, der von einem Server Daten empfängt und Daten zum Server senden kann.
Hier ein Auszug://Erstellen des UDP-Sockets SOCKET sock = SOCKET_ERROR; char buf[1024]; char replybuf[1024]; int Laenge; int laen = sizeof(saddr); memcpy ((char *)&saddr.sin_addr,host->h_addr,host->h_length); saddr.sin_family=host->h_addrtype; saddr.sin_port=htons(port); strcpy(&saddr.sin_addr, "127.0.0.1"); sock = socket(host->h_addrtype, SOCK_STREAM, IPPROTO_UDP); //Datenempfang recvfrom(sock, buf, sizeof(buf), 0, &saddr, &laen) //Daten senden sendto (sock, replybuf, 1024, 0, &client_addr, laen);
Leider erhalte ich folgende Fehlermeldungen beim Compilieren:
*
error C2664: 'strcpy': Konvertierung des Parameters 1 von 'in_addr *__w64 ' in 'char *' nicht möglich. Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
error C2664: 'recvfrom': Konvertierung des Parameters 5 von 'sockaddr_in *__w64 ' in 'sockaddr *' nicht möglich. Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
error C2664: 'sendto': Konvertierung des Parameters 5 von 'sockaddr_in *__w64 ' in 'const sockaddr *' nicht möglich. Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
*Wer kann mir weiterhelfen, wie ich die Serveradresse in "saddr.sin_addr" bekomme und was ich als Parameter 5 der Funktionen "recvfrom" und "sendto" einsetzen muss.
Falk2003
-
hi,
du musst inet_addr benutzen:
saddr.sin_addr.s_addr = inet_addr( "127.0.0.1" );und den struct sockaddr_in musst du in struct sockaddr casten:
recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr*)&saddr, &laen)falls du c++ programmierst benutz reinterpret_cast:
recvfrom(sock, buf, sizeof(buf), 0,
reinterpret_cast<struct sockaddr*>(&saddr), &laen)
-
Ich dank dir entelechie!
Funktioniert prima!
Falk2003