Shadowman Geschrieben 10. September 2008 Geschrieben 10. September 2008 hallo leute, aus einem bestimmten Anlass habe ich angefangen mich mit dem versenden von Daten über ein Netzwerk zu befassen. Es sieht so aus: Der Server (die gleiche Applikation wie die Clients) schickt einen Broadcast über das netzt und die Clients sollen abfragen, welche Server im Netz vorhanden sind. Hier ist auch schon das Problem. Ich habe mir eine Methode geschrieben, in der ich die IP des Servers (Absender des Broadcasts) beschaffen möchte. Hierfür habe ich mir in der Methode ein Socket erstellt, welches per UDP arbeitet (ich arbeite bei allen Verbindungen mit UDP). danach setze ich ein Bind auf den EP: IPAddress::Any und den port 4711 darauf folg ein Listen, welches mir aber eine Exception wirft, welche besagt "Der Vorgang wird von dem Objekttyp nicht unterstützt, auf den Bezug genommen wurde" Die Methode sieht im Moment so aus: IPAddress^ TNetzwerk::recieveServerIP(System::Windows::Forms::Label^ label) { Socket^ sock; sock = gcnew Socket(AddressFamily::InterNetwork,SocketType::Dgram,ProtocolType::Udp); try { sock->Bind(gcnew IPEndPoint(IPAddress::Any, 4711)); sock->Listen(5); sock->Accept(); } catch(Exception^ e) { label->Text = e->Message; } IPAddress^ ret = ret->Parse("0.0.0.0"); return ret; } Sie ist noch nicht vollständig, da ich an dem Listen momentan verzweifel Hat vielleicht jemand nen Tipp für mich, welche Methoden ich mir anschauen soll oder wie ich das anders bewerkstelligen kann, dass ich im Programm von einer unbekannten Quelle etwas empfangen kann um die Quelle zu identifizieren? Das Label dient im Moment übrigens nur zur ausgabe der Exception Zitieren
Shadowman Geschrieben 12. September 2008 Autor Geschrieben 12. September 2008 kann hier niemand helfen? hat ich die frage kompliziert formuliert? Zitieren
Shadowman Geschrieben 16. September 2008 Autor Geschrieben 16. September 2008 ich bin jetzt soweit gekommen, dass ich mit einem BeginReceive arbeite. dafür braucht man ja ein callback. vielleicht kann mir jetzt endlich mal jemand helfen und das ganze hier verläuft sich nicht wieder im nichts... void TNetzwerk::receiveServerIPCallback(IAsyncResult^ asyncResult) { UdpClient^ udpClient = ((UdpState^)asyncResult->AsyncState)->udpClient; IPEndPoint^ ipEndPoint = ((UdpState^)asyncResult->AsyncState)->ipEndPoint; IPAddress^ test = ((IPEndPoint^)udpClient->Client->RemoteEndPoint)->Address; array<Byte>^ receiveBytes = udpClient->EndReceive(asyncResult, ipEndPoint); call = Encoding::ASCII->GetString(receiveBytes); } das problem ist, dass ich zwar das callback bekomme, jedoch bekomme ich die IP des servers nicht heraus. in den zeil mit "test" wirft er diese exception: Eine nicht behandelte Ausnahme des Typs "System.Net.Sockets.SocketException" ist in System.dll aufgetreten. Zusätzliche Informationen: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde das macht er aber nicht beim Receive, wenn dies vor dem "test" steht (hatte es schon umgestellt, daher weiß ich das)...das finde ich komisch... wenn ich dann im debugger durch gehe sehe ich, dass im udpClient einige exceptions auftreten, die alle damit zusammen hängen, dass m_EndPoint keinen Wert hat. ich hoffe wirklich, dass jemand dabei helfen kann... mfg ShadowmanZ Zitieren
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.