UDP Beispiel funktioniert nicht
-
Hallo,
ich habe das UDP Beispiel von http://www.c-worker.ch/tuts.phpDas senden funktioniert aber dann bekomme ich die Fehlermeldung "recvfrom, fehler code: 10054"
Eigentlich benötige ich aber nur das empfangen.
#include <windows.h> #include <winsock.h> #include <stdio.h> #include <conio.h> //Prototypen int startWinsock(void); int main() { long rc; SOCKET s; char buf[256]; SOCKADDR_IN addr; SOCKADDR_IN remoteAddr; int remoteAddrLen=sizeof(SOCKADDR_IN); rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); getch(); return 1; } else { printf("Winsock gestartet!\n"); } //UDP Socket erstellen s=socket(AF_INET,SOCK_DGRAM,0); if(s==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); getch(); return 1; } else { printf("UDP Socket erstellt!\n"); } // addr vorbereiten addr.sin_family=AF_INET; addr.sin_port=htons(5999); addr.sin_addr.s_addr=inet_addr("127.0.0.1"); while(true) { printf("Text eingeben: "); gets(buf); rc=sendto (s,buf,strlen(buf),0,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: sendto, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("%d Bytes gesendet!\n", rc); } rc=recvfrom(s,buf,256,0,(SOCKADDR*)&remoteAddr,&remoteAddrLen); if(rc==SOCKET_ERROR) { printf("Fehler: recvfrom, fehler code: %d\n",WSAGetLastError()); getch(); return 1; } else { printf("%d Bytes empfangen!\n", rc); buf[rc]='\0'; printf("Empfangene Daten: %s\n",buf); } } } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }Die Ausgabe sieht z.B. so aus:
Winsock gestartet! UDP Socket erstellt! Text eingeben: test 4 Bytes gesendet! Fehler: recvfrom, fehler code: 10054Ich habe schon alles mögliche probiert, aber nichts hat geholfen und das Programm muss noch diese Woche funktionieren

Weis jemand woran das liegen könnte?
Viele Grüße,
Freddy
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
f.sp schrieb:
Weis jemand woran das liegen könnte?
der andere hat keinen offenen udp-port auf dem er deine datagrams empfangen kann, deshalb sendet er dir eine ICMP message: 'port unreachable'
also:
- sende nichts
oder
- sende broadcasts
oder
- mach bei der gegenstelle einen port auf.

-
Was meinst du mit "der andere"?
ich möchte mit diesem Programm eigentlich nur empfangen, aber ich kann den Sendebefehl nicht entfernen...
-
f.sp schrieb:
Was meinst du mit "der andere"?
das andere UDP, an das dein programm sendet.
f.sp schrieb:
...aber ich kann den Sendebefehl nicht entfernen...
warum nicht?

-
pale dog schrieb:
das andere UDP, an das dein programm sendet.
das gibt es eigentlich nicht, da das Programm ja nur empfangen soll

pale dog schrieb:
f.sp schrieb:
...aber ich kann den Sendebefehl nicht entfernen...
warum nicht?

Dann bekomme ich die Fehlermeldung: "recvfrom, fehler code: 10022"
-
-
ich meinte damit das dein code funktioniert wenn du den server startest

-
f.sp schrieb:
Dann bekomme ich die Fehlermeldung: "recvfrom, fehler code: 10022"
da fehlt dann noch der 'bind' aufruf, der sagt dem socket, auf welchem port er lauschen soll.
-
pale dog schrieb:
da fehlt dann noch der 'bind' aufruf, der sagt dem socket, auf welchem port er lauschen soll.
wie ist denn die Syntax des "bind" Aufrufes?
-
ich habe jetzt
rc=bind(s,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); getchar(); return 1; } else { printf("Socket an port 5999 gebunden\n"); }eingefügt, bekomme jetzt aber den Fehler: "bind, fehler code: 10048"
-
f.sp schrieb:
"bind, fehler code: 10048"
das heisst 'address in use' :p
es bedeutet, dass irgendein programm auf deinem rechner die selbe UDP port/ip-nummernkombination schon geöffnet hat.wie ist die SOCKADDR initialisiert?
wenn mit AF_INET und INADDR_ANY, dann solltest du mal die portnummer variieren...
-
Danke
ein java Programm ist noch im Hintergrund gelaufen... 
Bei einem Testprogramm tut es jetzt, aber bei einem Anderen bekomme ich den Fehler: "recvfrom 10040" was bedeutet das? Wie kann man eigentlich herausfinden was die codes bedeuten?
-
in der console: net helpmsg fehlernummer
-
f.sp schrieb:
Wie kann man eigentlich herausfinden was die codes bedeuten?
-
Der Puffer war zu klein, jetzt funktioniert es!!!

Vielen Dank für die tolle Hilfe!!!!
