Zum Inhalt springen

Netzwerkprogrammierung


Shadowman

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...