Socket-Programmierung in Java: Eine kurze Anleitung

Veröffentlicht: 2022-05-21

In Java ist die Socket-Programmierung ein Mittel, um programmübergreifend zu kommunizieren und mit verschiedenen JREs verbunden zu bleiben – sowohl mit verbindungsorientierten Servern als auch mit nicht verbindungsorientierten Servern. Ein Java-Server-Socket dient ausschließlich dazu, die Kommunikation zwischen einem Server und einem Client zu initiieren und abzuwickeln.

Dieser Blog behandelt alles Wissenswerte über die Socket-Programmierung.

Inhaltsverzeichnis

Socket-Programmierung in Java

Die Socket-Programmierung ist der Prozess der interaktiven Ergänzung und Verwendung separater Netzwerkknoten. Es ist ein bidirektionales Kommunikationssystem, bei dem ein Socket (Knoten) einen bestimmten Port an einer IP-Adresse abhört, während der andere Socket eine Verbindung herstellt.

Sockets in Java

In Java sind Sockets ein Ende eines bidirektionalen Kommunikationskanals, der zwei vernetzte Programme verbindet. Die TCP-Schicht wird verwendet, um dem angegebenen Java-Socket eine Portnummer zuzuweisen, um die Anwendung zu identifizieren, an die wir Daten übertragen. Wir verwenden die Kombination aus einer IP-Adresse und einer Portnummer, um einen Endpunkt zu erstellen.

Die Java-Plattform enthält eine Klasse namens Socket, die eine Seite einer bidirektionalen Netzwerkverbindung zwischen Ihrer Java-Anwendung und einem anderen Programm implementiert. Die Klasse sitzt auf einer plattformunabhängigen Implementierung und schützt Ihr Java-Programm vor systemspezifischen Details.

Durch die Verwendung der Klasse anstelle eines bestimmten nativen Codes können Ihre Java-Programme plattformunabhängig über das Netzwerk kommunizieren.

Darüber hinaus enthält java.net die ServerSocket-Klasse, die einen Socket implementiert, den Server verwenden können, um Verbindungen von Clients abzuhören und zu akzeptieren. Dies ist ein Beispiel, das zeigt, wie die ServerSocket-Klassen und Socket verwendet werden.

Zwischen dem clientseitigen Port und dem serverseitigen Port wird eine Verbindung hergestellt.

Herstellen einer Java-Socket-Verbindung [CLIENT SIDE]

Bevor Sie mit der clientseitigen Programmierung fortfahren, sollte der Client auf die Initiierung des Servers warten. Sobald es läuft, beginnt es, Anfragen an den Java-Server zu senden. Der Client wartet dann auf die Antwort des Servers. Dies ist eine gute Zusammenfassung der Client-Server-Verbindungslogik.

Schauen wir uns die clientseitige Programmierung genauer an.

Um eine Verbindung zu einem anderen Computer herzustellen, benötigen Sie eine Socket-Verbindung. Die beiden Computer müssen wissen, wo sie sich im Netzwerk befinden (IP-Adresse) und welchen TCP-Port sie verwenden, um eine Socket-Verbindung herzustellen. Das java.net-Framework bezeichnet die Socket-Klasse.

Die IP-Adresse des Servers ist das erste Eingabeargument. Der TCP-Port ist hier der nächste Parameter. (Es ist nichts anderes als eine Zahl, die angibt, welches Programm auf einem Server gestartet werden soll.) HTTP beispielsweise verwendet Port 80. Normalerweise liegt der Bereich der Portnummern zwischen 0 und 65535.

Kommunikation

Streams werden für die Dateneingabe und -ausgabe bei der Kommunikation über eine Socket-Verbindung verwendet. Nachdem Sie die Anforderungen gesendet und eine starke Verbindung hergestellt haben, müssen Sie die Socket-Verbindung beenden.

Schließen einer Java-Server-Socket-Verbindung

Die Socket-Verbindung wird explizit geschlossen, nachdem die Nachricht an den Server gesendet wurde, die Socket-Verbindung wird explizit geschlossen.

// Demo-Java-Programm für Clientele

java.net.* importieren;

java.io.* importieren;

öffentliche Klasse Client_Side_Program

{

// zum Initialisieren von Socket-Streams, Input-Streams und Output-Streams

privater Socket socket = null;

private DataInputStream-Eingabe = null;

privater DataOutputStream out = null;

// Konstruktor zum Einfügen von TCP-Port und IP-Adresse

Öffentlicher Client (String add, int port)

{

// Verbindung herstellen

Versuchen

{

socket = new Socket(hinzufügen, port);

System.out.println("Verbunden");

// Nimmt Eingaben vom Terminal

Eingabe = neuer DataInputStream (System.in);

// sendet die Ausgabe an den Socket

out = new DataOutputStream(socket.getOutputStream());

}

catch(UnknownHostException u)

{

System.out.println(u);

}

catch(IOException i)

{

System.out.println(i);

}

// Zeichenfolge zum Lesen der Nachricht von der Eingabe

Zeichenkette = „“;

// weiterlesen bis „Over“ eingegeben wird

while (!line.equals(“Over”))

{

Versuchen

{

line = input.readLine();

out.writeUTF (Zeile);

}

catch(IOException i)

{

System.out.println(i);

}

}

// Verbindung schließen

Versuchen

{

input.close();

out.close();

socket.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(String args[])

{

Client-Client = neuer Client ("127.0.0.1", 5000);

}

}

Um die Quelle dieses Codes zu besuchen, klicken Sie hier .

Herstellen einer Java-Socket-Verbindung [SERVER-SEITE]

Der Server erstellt sein Objekt und wartet auf die Anforderung des Clients, während er die Verbindung auf Seiten des Java-Servers berücksichtigt. Der Server interagiert mit dem Client, sobald die Anfrage gesendet wurde. Sie benötigen zwei Sockets, um die serverseitige Anwendung zu codieren, was wie folgt aussieht: Wenn ein Client ein neues Socket() erstellt, wird ein ServerSocket erstellt, um auf Clientanforderungen zu warten. Ein einfacher Socket kann als ein Programm definiert werden, das die serverseitige Kommunikation mit dem Client initiiert. Sie können die Antworten entsprechend mit dem Client kommunizieren, sobald Sie den Bericht von der serverseitigen Java-Socket-Verbindung erhalten.

Kommunikation

Um den Socket zum Senden von Ausgaben zu verwenden, freuen wir uns im Allgemeinen auf die Verwendung der Methode getOutputStream().

Schließen einer Java-Server-Socket-Verbindung

Es ist wichtig, die Verbindung zu beenden, indem sowohl der Socket als auch die Input-Output-Streams ausgeschaltet werden.

// Ein Server-Java-Programm

java.net.* importieren;

java.io.* importieren;

öffentlicher Klassenserver

{

//Socket und Eingabestrom initialisieren

privater Socket socket = null;

privater ServerSocket -Server = null;

privater DataInputStream in = null;

// Konstruktor mit Port

Öffentlicher Server (int-Port)

{

// wartet nach dem Starten eines Servers auf eine Verbindung

Versuchen

{

Server = neuer ServerSocket (Port);

System.out.println(“Server: gestartet”);

System.out.println(“Warten auf die Ankunft eines Clients …”);

socket = server.accept();

System.out.println("Client wurde akzeptiert");

// zum Empfangen von Client-Socket-Eingaben

in = neuer DataInputStream(

new BufferedInputStream(socket.getInputStream()));

Zeichenkette = „“;

// zum Lesen der Nachricht vom Client, bis „Over“ gesendet wird

while (!line.equals(“Over”))

{

Versuchen

{

line = in.readUTF();

System.out.println (Zeile);

}

catch(IOException i)

{

System.out.println(i);

}

}

System.out.println("Verbindung schließen");

// Verbindung schließen

socket.close();

in.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(String args[])

{

Server server = neuer Server (5000);

}

}

Um die Details dieses Codes zu überprüfen, klicken Sie hier .

Sie können die serverseitige Software zuerst ausführen, nachdem Sie sowohl die Client- als auch die Serverseite konfiguriert haben. Anschließend müssen Sie die clientseitige Software ausführen und die Anforderung senden. Der Server reagiert sofort, wenn die Anfrage vom Client kommt.

Erkunden Sie unsere beliebten Softwareentwicklungskurse

SL. Nein Softwareentwicklungsprogramme
1 Master of Science in Informatik von LJMU & IIITB Caltech CTME Cybersecurity-Zertifikatsprogramm
2 Full-Stack-Entwicklungs-Bootcamp PG-Programm in Blockchain
3 Executive Post Graduate Program in Softwareentwicklung - Spezialisierung auf DevOps Alle Softwareentwicklungskurse anzeigen

Terminal oder Eingabeaufforderung läuft

Um das Terminal oder die Eingabeaufforderung zu starten, verwenden wir die folgenden Befehle. Zunächst erstellen wir zwei Fenster, eines für den Server und das andere für den Client.

  1. Lassen Sie das Server-Programm laufen.

$ Java-Server

  1. Starten Sie dann in einem anderen Terminal die Client-Anwendung als

Java-Client $

Die Software zeigt „Verbunden“ und „Client akzeptiert“ an, wenn der Server den Client akzeptiert.

  1. Im Client-Feld können Sie dann mit der Eingabe von Nachrichten beginnen. Hier ist ein Beispiel für eine Client-Eingabe.

Hi! Dies ist meine erste professionelle Steckdosenverbindung.

Welche der Server erhält und gleichzeitig anzeigt

Hi! Dies ist meine erste professionelle Steckdosenverbindung.

Über.

Verbindung schließen

Wie bereits erwähnt, beendet das Senden von „Over“ die Verbindung zwischen dem Client und dem Server.

Lesen Sie unsere beliebten Artikel zur Softwareentwicklung

Wie implementiert man Datenabstraktion in Java? Was ist die innere Klasse in Java? Java-Identifikatoren: Definition, Syntax und Beispiele
Verstehen der Kapselung in OOPS mit Beispielen Befehlszeilenargumente in C erklärt Top 10 Merkmale und Merkmale von Cloud Computing im Jahr 2022
Polymorphismus in Java: Konzepte, Typen, Eigenschaften und Beispiele Pakete in Java und wie man sie benutzt? Git-Tutorial für Anfänger: Lernen Sie Git von Grund auf neu

Fazit

Die Java-Socket-Programmierung ist ein wesentliches Werkzeug, das mithilfe von Socket-APIs fortfährt, um die Kommunikation zwischen lokalen und entfernten Client-Server-Anwendungen herzustellen. Richtiges Wissen über die Socket-Programmierung kann die Hin- und Her-Verbindungen zwischen Server und Client verbessern.

Wenn Sie Java lernen und die Full-Stack-Entwicklung beherrschen möchten, haben wir genau das Richtige für Sie: das Executive PG Program in Software Development – ​​Specialization in Full Stack Development von upGrad .

Das 13-monatige Programm von IIIT-B soll Studenten dabei helfen, Fähigkeiten wie Grundlagen der Informatik, Softwareentwicklungsprozesse, Backend-APIs und interaktive Web-UI zu erwerben. Sie erhalten Zugang zu einem Software Career Transition Bootcamp sowohl für Nicht-Techniker als auch für neue Programmierer, um ihre Programmierkenntnisse zu verbessern, sowie 360°-Karriereunterstützung von upGrad.

Lernen Sie Softwareentwicklungskurse online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.

Was sind die Vorteile des Erlernens der Java-Socket-Programmierung?

Sockets können verwendet werden, um eine Client-Server-Anwendung, wie z. B. einen Chat, vom Netzwerkstandpunkt aus zu erstellen. Sockets werden auf der einfachsten Sicherheitsebene implementiert, um festzustellen, ob die Ports eines Systems offen sind, ob es Standard-Port-Scanner-Programme wie Nmap gibt und ob sie auf niedriger Ebene verwendet werden können. Sie können auf die gleiche Weise verwendet werden wie der SSH-Befehl Secure Socket Shell, um über eine Reverse-Shell eine Verbindung zu einem externen Server herzustellen.

Was macht die Accept-Funktion?

Die Accept-Funktion wartet darauf, dass sich ein Client mit dem Server verbindet, indem sie blockiert, dort zu bleiben, bis ein Argument eintrifft. Dann verwenden wir die getInputStream-Funktion, um Eingaben vom Socket zu erhalten. Der Server ist so ausgelegt, dass er gesendete Nachrichten weiterhin akzeptiert, bis der Over-Befehl empfangen wird.

Warum werden Threads in der Netzwerkprogrammierung verwendet?

Wir möchten, dass mehrere Kunden gleichzeitig beitreten. Daher müssen wir Threads auf der Serverseite verwenden, damit ein anderer Thread jede Client-Anfrage verarbeiten kann. Nehmen wir eine Situation an, in der zwei Anfragen gleichzeitig beim Server eingehen. Da in unserer einfachen Server-Client-Anwendung keine Methode zur gleichzeitigen Verarbeitung mehrerer Anfragen angegeben ist, kann die Anfrage, die auch nur eine Nanosekunde früher eintrifft, eine Verbindung zum Server herstellen, während die andere Anfrage abgelehnt wird.