Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Netzwerkprogrammierung

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.