„Hallo, Amigo!“

„Hallo, Rishi!“

„Das Thema der heutigen Lektion sind Steckdosen.“

„Sie wissen bereits, dass jeder Computer im Netzwerk eine eigene, eindeutige IP-Adresse hat.“

"Ja."

„Stellen Sie sich nun vor, Sie hätten mehrere Computer, auf denen jeweils ein Dutzend Programme laufen, die auf das Internet zugreifen: Skype, ICQ usw.“

„Und diese Programme wollen miteinander kommunizieren.“

„Wir müssen verhindern, dass sie sich gegenseitig stören. Wir müssen dafür sorgen, dass sich Skype mit Skype, Slack mit Slack usw. verbindet.“

„Erinnern Sie sich, wie dieses Problem mit URLs und Webservern gelöst wurde?“

„Ja, wir haben Ports hinzugefügt.“

"Exakt."

„Es ist so, als würde man in einem Haus eine Reihe kleiner Räume bauen und sagen, das Haus sei ein Wohnhaus. Jeder Hafen ist wie eine separate Wohnung.

„Wenn eine IP-Adresse eine eindeutige Kennung für einen Computer ist, dann ist eine IP-Adresse in Kombination mit einem Port eine eindeutige Kennung für eine bestimmte ‚Wohnung‘ im Computer, in der sich ein Programm befinden kann.

„Dieser einzigartige Ort wird Socket genannt .“

„Ein Socket hat seine eigene eindeutige Nummer, die aus einer IP-Adresse und einer Portnummer besteht.

„Ah. Mit anderen Worten, ein Socket ist eine Kennung für einen virtuellen Computerspeicherort, an dem sich ein Programm befinden kann? Und ein anderes Programm sendet Nachrichten an diesen Speicherort, wodurch die beiden Programme kommunizieren können?“

„Ich weiß nicht, wie du das verstanden hast, aber das ist genau richtig.“

„Mein Robo-Sinn hat es mir gesagt.“

„Großartig. Dann lass mich dir ein paar Details erzählen.“

„Sockets sind tatsächlich die einfachste und primitivste Art der Programmkommunikation.“

„Java hat zwei Klassen für die Arbeit mit Sockets. Sie sind Socket und ServerSocket .“

ServerSocket ist eine spezielle Klasse, deren Objekte den Server repräsentieren, d. h. sie ermöglichen es mir, Anfragen zu bearbeiten, die an einem bestimmten Socket ankommen.“

„Die Socket- Klasse ist eigentlich ein Client-Socket. Wir verwenden sie, um Nachrichten an einen anderen Socket zu senden und die Antworten zu empfangen.“

„So senden Sie eine Nachricht an einen Socket:“

Beispiel
// Create a socket
Socket clientSocket = new Socket("localhost", 4444);

// Get an OutputStream
OutputStream outputStream = clientSocket.getOutputStream();
PrintWriter out = new PrintWriter(outputStream, true);
out.println("Kiss my shiny metal ass!");
out.flush();

// Read the response
InputStream inputStream = clientSocket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String answer = in.readLine();

„Es ist alles sehr ähnlich wie das Herunterladen einer Datei aus dem Internet.“

„Das, mein Junge, liegt daran, dass dort auch Steckdosen verwendet werden.“

„Steckdosen sind das Herzstück von allem, was mit einem Netzwerk zu tun hat – also fast allem.“

„Weitere Informationen können Sie hier lesen “

„Danke für die Lektion, Rishi.“

„Ich bin noch nicht fertig. Das ist Wunschdenken.“

„Jetzt untersuchen wir, wie ein Server-Socket funktioniert.“

„Es ist etwas komplizierter.“

Beispiel
// Create a server socket object
ServerSocket serverSocket = new ServerSocket(4444); // Port

// Process incoming connections in a loop
while (true)
{
 // The accept method waits for someone to connect
 Socket socket = serverSocket.accept();

 // Read the response
 InputStream inputStream = socket.getInputStream();
 BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
 String message = in.readLine();

 // Create a response - we'll just reverse the string
 String reverseMessage = new StringBuilder(message).reverse().toString();

 // Send the response
 OutputStream outputStream = socket.getOutputStream();
 PrintWriter out = new PrintWriter(outputStream, true);
 out.println(reverseMessage);
 out.flush();
}

„Ich möchte Sie auf einige Punkte aufmerksam machen.“

„Punkt 1: Um einen (Client-)Socket zu erstellen, müssen Sie eine IP-Adresse (oder einen Domänennamen) und einen Port angeben. Um einen Server-Socket zu erstellen, müssen Sie nur einen Port angeben. Der Server-Socket existiert nur auf dem Computer, auf dem Es wurde kreiert."

„Punkt 2: Die ServerSocket-Klasse verfügt über eine Methode „accept()“, die auf eine eingehende Verbindung wartet. Mit anderen Worten: Die Methode wird ewig ausgeführt, bis ein Client-Socket versucht, eine Verbindung herzustellen. Dann akzeptiert die Methode „accept()“ die Verbindung und erstellt einen Socket Objekt, um die Kommunikation zu ermöglichen, und gibt dann dieses Objekt zurück.

„Aus der Sicht eines Java-Programmierers besteht ein Socket aus zwei Streams: einem InputStream, aus dem Sie Nachrichten/Daten lesen, und einem OutputStream, in den Sie Nachrichten/Daten schreiben.“

„Wenn Sie einen Server-Socket erstellen, erstellen Sie tatsächlich einen Port, mit dem Client-Sockets auf anderen Computern eine Verbindung herstellen können. Dazu müssen sie jedoch die Portnummer unseres Sockets und die IP-Adresse unseres Computers korrekt angeben. Nun, oder seinen Domänennamen.“

„Hier ist ein interessantes Beispiel für Sie. Sie können versuchen, sich damit auseinanderzusetzen und es auszuführen:“

https://www.logicbig.com/tutorials/core-java-tutorial/http-server/http-server-basic.html

„Der springende Punkt dabei ist, einen Server-Socket zu verwenden, um einen superprimitiven Webserver zu schreiben, auf den Sie einfach über einen Browser zugreifen können.“

„Wow! Ein Webserver? Cool! Ich werde es mir ganz genau ansehen.“

„Danke, Rishi.“

„Das ist alles, Amigo. Entspann dich!“