Home » Tutorials » Netzwerk und Internet » Sockets mit WinAPI

Sockets mit WinAPI

Socketoptionen und UDP-Broadcast

Im fast letzten Kapitel gehen wir noch ein bisschen darauf ein, was man an einem Socket noch so einstellen kann. Die Adresse des Sockets haben wir schon mehrfach geübt, aber es gibt noch andere Sachen. Auf drei davon gehe ich mal näher ein.

Broadcasten

Broadcasten ist die Möglichkeit von UDP an alle Rechner eine kurze Nachricht (max. 512 Bytes) zu schicken. Natürlich dann nur an eine Portnummer der Rechner. Was bedeutet dabei alle Rechner? Es kommt darauf an, ob der Router diese Broadcast-Messages weiterleitet. Innerhalb eines LAN ist dieses Weiterleiten gängig. Aber spätestens beim ISP ist Schluss. Dadurch können wir einen Broadcast nicht durchs WAN schicken. Ich denke das ist im Sinne aller Nutzer.
Wie geht das Broadcasten nun? Zuerst können wir sagen, wie in Kapitel 5 beschrieben, nur als Ziel-IP-Adresse übergeben wir ‚255.255.255.255‘. Damit würden wir jetzt ‚Hallo Du da‘ an alle Rechner (auch an unseren eigenen) an Port 6000 senden.
Nur bisher würde das Senden unser Socket nicht zulassen, wie dem ein oder anderen vielleicht schon aufgefallen ist. Dazu müssen wir einfach das Socket umstellen:

 len := 1;
  value := true;
  if SetSockOpt(FSocket,
                SOL_SOCKET,
                SO_BROADCAST,
                @value,
                len) = Socket_Error then
    HandleError;

Jetzt können wir munter drauf los broadcasten. Dieselben Parameter in getsockopt bewirken übrigens, dass wir den aktuell eingestellten Wert in value erhalten.

Andere Optionen

Andere Optionen (anstatt SO_BROADCAST) sind zum Beispiel:

  • SO_KEEPALIVE (Sendet „Keep Alive“-Pakete in TCP Verbindungen)
  • SO_RCVBUF (Buffergröße des Sockets zum Empfangen)
  • SO_REUSEADDR (ob mehrere Sockets an dieselbe Adresse gebunden werden können)
  • SO_SNDBUF (Buffergröße des Sockets zum Senden)

Bei den Buffergrößen ist value ein Integer und Len muss entsprechend auf 4 = SizeOf(Integer) gesetzt werden.

5 Gedanken zu „Sockets mit WinAPI“

  1. Wo findet sich denn der Link, um die Programmbeispiele herunterzuladen?
    Ich suche jetzt schon eine Weile, finde aber nichts.

  2. Eine weitere – aus meiner Sicht sehr wichtige – Antwort auf die Frage, warum man die Sockets selbst über die Windows API programmieren sollte, wäre noch:

    Ich hatte vor ca. 10 Jahren einen „Chat“ über die Komponenten von Delphi programmiert. Wir haben hier in der Firma einen Linux-Server zu stehen. Da die Leute das lustig fanden, ist der Chat heute fester Bestandteil. Linux bedeutet aber insoweit Probleme, weil ich das Programm emulieren lassen muss. Dafür würde sich theoretisch wine anbieten.
    Der Haken ist aber, dass die Komponenten alle fest in der VCL verankert sind und man mit wine nicht weit kommt. Man braucht also eine virtuelle Maschine mit Windows, um den Server laufen zu lassen. Insoweit erhoffe ich mir, dieses Problem eventuell lösen zu können. Wenn es mir gelingt, mit dieser Anleitung eine eigene Klasse ganz ohne jede VCL erstellen zu können, dann kann ich den Server als Konsolen-Programm erstellen und (endlich) ohne den ganzen Overhead unter wine laufen lassen.

    Falls den Seitenadmin dieser Kommentar stört, kann er ihn gern wieder gelöscht werden. Aber auf der Suche nach Sockets ohne VCL, wäre dies als Fund bei Suchmaschinen schon vor langer Zeit sehr hilfreich für mich gewesen. Suchmaschinen finden aber immer nur den Text, der auf den Seiten tatsächlich irgendwo steht und wenn man nach „nonvcl“ im Zusammenhang mit Sockets unter Delphi sucht, sieht es dünn aus mit den Suchergebnissen.

  3. Hallo, ich kann leider auch deine Programmbeispiele als Datei nicht finden. Sind die nicht mehr verlinkt?

    Ansonsten gutes Tutorial 🙂

Kommentare sind geschlossen.