Skip to main content

Programmierung von TCP- und UDP-Anwendungen

  • Chapter
  • First Online:
TCP, UDP und QUIC Internals
  • 121 Accesses

Zusammenfassung

Viele Kommunikationsanwendungen werden heute auf Basis der Socket API entwickelt. Höhere Kommunikationsmechanismen wie Remote Procedure Call (RPC), Remote Method Invocation (RMI) oder Message Passing nutzen ebenfalls überwiegend die Socket API, die ursprünglich nur in der Programmiersprache C implementiert war, heute aber in allen gängigen Programmiersprachen zur Verfügung steht. In Java gibt es eine komfortable Nutzungsmöglichkeit, die es gestattet, ganze Java-Objekte als Nachricht zu übertragen. Das Java-Laufzeitsystem übernimmt auch die Serialisierung und Deserialisierung der Objekte bei TCP-Sockets. Ebenso können Datagramm-Sockets und Multicast-Sockets auf Basis von UDP genutzt werden. Serveranwendungen, die sehr viele Anfragen von Clients pro Zeiteinheit bearbeiten müssen, können diese Anfragen nicht seriell in einem Thread bearbeiten, sondern implementieren in der Regel Multithreading, wobei es mehrere Varianten gibt. Entweder wird jedem Client serverseitig ein eigener Workerthread zugewiesen, oder es werden einzelne Client-Requests zur Bearbeitung an Workerthreads übergeben. Für Hochleistungsanwendungen ist die feingranulare Zuordnung eines Client-Requests an einen Workerthread effizienter. Die Threads werden in einem Threadpool verwaltet, und ankommende Requests werden freien Threads zugeordnet. Damit ein Server hier effizient arbeiten kann, werden häufig über der Socket API liegende Frameworks bzw. APIs wie nio und netty verwendet, die auch ein effizientes, nicht blockierendes Warten auf ankommende Requests ermöglichen. Dies erfolgt unter Zuhilfenahme der speziellen Systemfunktion select, mit der die Programmierung eines zentralen Ereigniswartepunktes für viele Ereignisquellen wie TCP-Verbindungen realisiert werden kann. Im Folgenden wird die Programmierung von socketbasierten Anwendungen erläutert. Insbesondere wird die Socket API in Java besprochen. Programmierhilfen für einfachere Anwendungen auf Basis von TCP- und UDP-Sockets werden aufgezeigt, ein einfaches Framework zur Erleichterung der Programmierung wird vorgestellt, und die Programmierung von Servern für sehr leistungsstarke Anwendungen wird andiskutiert.

Auf die Entwicklung von QUIC-basierten Anwendungen wird in Ermangelung einer Standard-API nicht weiter eingegangen. Es besteht noch Hoffnung, dass eine API, mit der portierbare Anwendungen beispielsweise in Java auf Basis eines Standards ähnlich wie die TCP-Sockets auch in QUIC programmiert werden können; eine Aussage der Internet-Community hierzu (August 2023) gibt es aber nicht.

Zusammenfassung

Viele Kommunikationsanwendungen werden heute auf Basis der Socket API entwickelt. Höhere Kommunikationsmechanismen wie Remote Procedure Call (RPC), Remote Method Invocation (RMI) oder Message Passing nutzen ebenfalls überwiegend die Socket API. In Java besteht eine komfortable Nutzungsmöglichkeit, die es gestattet, ganze Java-Objekte als Nachricht zu übertragen. Das Java-Laufzeitsystem übernimmt auch die Serialisierung und Deserialisierung der Objekte bei TCP-Sockets. Ebenso können Datagramm-Sockets und Multicast-Sockets auf Basis von UDP genutzt werden. In diesem Kapitel wird insbesondere die Programmierung von Anwendung mit Java-Sockets besprochen. Programmierhilfen für einfachere Anwendungen werden aufgezeigt, ein einfaches Framework zur Erleichterung der Socket-Programmierung wird vorgestellt und die Entwicklung von Servern für leistungsstarke Anwendungen wird diskutiert. Auf die Entwicklung von QUIC-basierten Anwendungen wird in Ermangelung einer Standard-API nicht weiter eingegangen.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 29.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 39.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    Selbstverständlich kann man auch Peer-to-Peer-Anwendungen mit Sockets realisieren.

  2. 2.

    Mit der Trennung von Adressfamilie (AF_*) und Protokollfamilie (PF_*) wollte man sicherstellen, dass Protokollfamilien mit mehreren Adressstrukturen unterstützt werden können. Da dies bisher nicht vorkommt, werden die jeweiligen Konstanten gleichgesetzt. Hier wird nur ein Auszug der möglichen Werte gezeigt (vgl. auch Stevens 2000).

  3. 3.

    Siehe z. B. IEEE POSIX (2016) oder http://man7.org/linux/man-pages/man2/fcntl.2.html (zugegriffen am 24.08.2023).

  4. 4.

    In guten Socket-Programmen wird man keine verdrahteten IP-Adressen vorfinden, sondern Hostnamen, die über DNS aufgelöst werden.

  5. 5.

    Ein nicht blockierender Aufruf von accept ist ebenfalls möglich.

  6. 6.

    http://www.json.org (zugegriffen am 01.05.2023).

  7. 7.

    https://devdocs.io/openjdk~18/java.base/java/net/socket (zugegriffen am 02.05.2023).

  8. 8.

    Dies ist auch in der Java-API-Beschreibung beim Konstruktor für ObjectInputStream nachzulesen: https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/io/ObjectInputStream.html.

  9. 9.

    Der komplette Sourcecode des Mini-Frameworks ist unter Github zum Download verfügbar.

Literatur

  • Hafner, K; Lyon, M. (2000) ARPA KADABRA oder die Geschichte des Internet, dpunkt.verlag, 2000

    Google Scholar 

  • IEEE POSIX (2016) The Open Group Base Specifications Issue 7, IEEE Std 1003.1™-2008, 2016 Edition, http://pubs.opengroup.org/onlinepubs/9699919799/, letzter Zugriff am01.05.2023

  • Mandl, P. (2009) Masterkurs Verteilte betriebliche Informationssysteme – Prinzipien, Architekturen und Technologien, Springer-Vieweg Verlag, 2009

    Google Scholar 

  • Mandl, P. (2014) Grundkurs Betriebssysteme, 4. Auflage, Springer-Vieweg Verlag, 2014

    Google Scholar 

  • Mauer, N.; Wolfthal M. A. (2016) Netty in Action, Manning Publications, 2016

    Google Scholar 

  • Stevens, R. W.; Fenner, B.; Rudoff A.M (2005) UNIX Network Programming. The Sockets Networking API. Volume 1. 3. Auflage. Addison Wesley, 2004

    Google Scholar 

  • Stevens, R. W. (2000) Programmieren von UNIX-Netzen, Hanser Verlag, 2000

    Google Scholar 

  • Tanenbaum, A. S.; Feamster, N. Wetherall, D. J. (2021) Computer Networks, Sixth Edition, Pearson Education Limited, 2021

    Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

7.1 Elektronisches Zusatzmaterial

Rights and permissions

Reprints and permissions

Copyright information

© 2024 Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature

About this chapter

Check for updates. Verify currency and authenticity via CrossMark

Cite this chapter

Mandl, P. (2024). Programmierung von TCP- und UDP-Anwendungen. In: TCP, UDP und QUIC Internals. Springer Vieweg, Wiesbaden. https://doi.org/10.1007/978-3-658-43988-0_7

Download citation

Publish with us

Policies and ethics