Veröffentlicht 11. Mai 201015 j 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 201015 j von neo336
11. Mai 201015 j 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
12. Mai 201015 j 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
12. Mai 201015 j Autor 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
12. Mai 201015 j Autor 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
12. Mai 201015 j weis vieleicht jemand wie das heisst kan mich nicht mehr an den namen erinnern.. Wireshark ? Wikipedia
12. Mai 201015 j Autor 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
20. Mai 201015 j Autor 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.