neo336 Geschrieben 11. Mai 2010 Geschrieben 11. Mai 2010 (bearbeitet) hallo zusammen Ich versuche in meinem Programm eine udp verbindung herzustellen ohne das ich weis welche ip das der andere client eigentlich besitzt. oder bischen genauer gesagt: Sobald das programm auf 2 pc's auf dem selben netzwerk läuft soll es sich automatisch miteinander verbinden. zum testen habe ich mal einen Sender und einen Empfänger erstellt bis jetzt habe ich das ganze mit CAsyncSocket versucht: // Initialisierung Sender CAsyncSocket *pSocket = new CAsyncsocket(); pSocket->Create(65501, SOCK_DGRAM); pSocket->Send("Test", sizeof("Test")); // mit einem timer wiederhole //ich das Send alle 1s //Initialisierung Empfänger CAsyncSocket *pSocket = new CAsyncsocket(); pSocket->Create(65501, SOCK_DGRAM); pSocker->Listen(); // OnReceive MessageBox("Angekommen"); wenn ich das ausführe passiert gar nichts Kann mir vieleicht jemand einen Tip geben was ich vergessen habe zu beachten? Danke im voraus und Freundliche grüsse Neo336 Bearbeitet 11. Mai 2010 von neo336
flashpixx Geschrieben 11. Mai 2010 Geschrieben 11. Mai 2010 Naja beim UDP Protokoll muss Du schon einen Empfänger angeben. Ich denke Du willst so etwas wie Zeroconf / Bonjour realisieren, dazu kannst Du Multicastpakete verwenden
RipperFox Geschrieben 12. Mai 2010 Geschrieben 12. Mai 2010 Neo336: Du nutzt die falsche Methode: Nutze "SendTo" statt "Send" (das nutzt bei bei verbundenen TCP-Sockets). Ohne Ziel-IP sollte SendTo automatisch an die Broadcastadresse senden - evtl. problematisch bei mehreren Interfaces.. Siehe: CAsyncSocket::SendTo besonders der untere Abschnitt zum Thema Broadcast. Grüße Ripper
neo336 Geschrieben 12. Mai 2010 Autor Geschrieben 12. Mai 2010 Vielen dank es funktioniert nun mit SendTo int nflag = 1; CAsyncSocket *pSocket = new CAsyncsocket(); pSocket->Create(0, SOCK,DGRAM); pSocket->SetSockOpt(SO_BROADCAST, &nflag, sizeof(nflag, SOL_SOCKET); pSocket->SendTo("Test", sizeof("Test"), INADDR_BROADCAST); Freundliche grüsse Neo336
neo336 Geschrieben 12. Mai 2010 Autor Geschrieben 12. Mai 2010 hmm irgendwas funktioniert doch noch nicht die übertragung hat einmal geplappt aber jetzt nicht mehr Es gibt doch ein programm das aufzeigt was alles für nachrichten im netzwerk herumschwirren.. weis vieleicht jemand wie das heisst kan mich nicht mehr an den namen erinnern.. Vielen dank Neo336
flashpixx Geschrieben 12. Mai 2010 Geschrieben 12. Mai 2010 weis vieleicht jemand wie das heisst kan mich nicht mehr an den namen erinnern.. Wireshark ? Wikipedia
neo336 Geschrieben 12. Mai 2010 Autor Geschrieben 12. Mai 2010 ja genau wireshark thx also das senden funtkioniert die nachricht ist im wireshark auf dem broadcast zu sehen also muss etwas mit der OnReceive Methode nicht stimmen. Ich habe den Socket beim empfänger genau gleich initialisiert wie beim sender also : int nflag = 1; CAsyncSocket *pSocket = new CAsyncsocket(); pSocket->Create(0, SOCK,DGRAM); pSocket->SetSockOpt(SO_BROADCAST, &nflag, sizeof(nflag, SOL_SOCKET); und dan die OnReceive funktion hinzugefügt CAsyncSocket::OnReceive(int nErrorCode) { //etc.... } aber er kommt gar nie ins OnReceive muss ich da noch etwas weiteres beachten? Neo336
RipperFox Geschrieben 12. Mai 2010 Geschrieben 12. Mai 2010 Der UDP-Port sollte gleich sein, ne? Grüße Ripper
neo336 Geschrieben 20. Mai 2010 Autor Geschrieben 20. Mai 2010 Hab den Fehler gefunden es lag am SendTo SOCKADDR_IN sock; sock.sin_family = AF_INET; sock.sin_port = htons(nPort); sock.sin_addr = INADDR_BROADCAST; pSocket->SendTo(strText, sizeof(strText), (SOCKADDR*)&sock, sizeof(sock); Freundliche grüsse und vielen dank an alle Neo336
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden