Zum Inhalt springen

Netzwerkprogrammierung


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...