neo336 Geschrieben 11. Mai 2010 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 11. Mai 2010 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
RipperFox Geschrieben 12. Mai 2010 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
neo336 Geschrieben 12. Mai 2010 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
neo336 Geschrieben 12. Mai 2010 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 12. Mai 2010 Teilen Geschrieben 12. Mai 2010 weis vieleicht jemand wie das heisst kan mich nicht mehr an den namen erinnern.. Wireshark ? Wikipedia Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
neo336 Geschrieben 12. Mai 2010 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
RipperFox Geschrieben 12. Mai 2010 Teilen Geschrieben 12. Mai 2010 Der UDP-Port sollte gleich sein, ne? Grüße Ripper Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
neo336 Geschrieben 20. Mai 2010 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.