– Szia Amigo!

– Helló, Rishi!

– A mai óra témája a konnektorok.

"Már tudja, hogy a hálózat minden számítógépének saját egyedi IP-címe van."

"Igen."

"Most képzeld el, hogy több számítógéped van, amelyek mindegyike egy tucat programot futtat, amelyek elérik az internetet: Skype, ICQ stb."

– És ezek a programok kommunikálni akarnak egymással.

"Meg kell akadályoznunk, hogy zavarják egymást. Meg kell teremtenünk, hogy a Skype csatlakozzon a Skype-hoz, a Slack csatlakozzon a Slackhoz stb."

"Emlékszel, hogyan oldották meg ezt a problémát az URL-ekkel és a webszerverekkel?"

– Igen, hozzáadtunk kikötőket.

"Pontosan."

"Olyan ez, mintha egy csomó kis szobát csinálnánk egy házban, és azt mondanák, hogy a ház egy bérház. Minden kikötő olyan, mint egy külön lakás. "

"Ha egy IP-cím egy számítógép egyedi azonosítója, akkor az IP-cím egy porttal kombinálva a számítógép egy bizonyos "lakása" egyedi azonosítója, ahol egy program elhelyezhető. "

"Ezt az egyedülálló helyet aljzatnak hívják ."

"A socketnek saját egyedi száma van, amely egy IP-címből és egy portszámból áll. "

"Ah. Más szavakkal, a socket egy olyan virtuális számítógéphely azonosítója, ahol egy program tartózkodhat? És egy másik program üzeneteket küld erre a helyre, ami lehetővé teszi a két program közötti kommunikációt?"

– Nem tudom, hogy értetted ezt, de pontosan így van.

– A robo-érzékem megmondta.

– Remek. Akkor hadd mondjak el néhány részletet.

"Az aljzatok valójában a programok kommunikációjának legalapvetőbb és legprimitívebb módja."

"A Java-nak két osztálya van a socketekkel való munkához. Ezek a Socket és a ServerSocket ."

" A ServerSocket egy speciális osztály, amelynek objektumai a szervert reprezentálják, azaz lehetővé teszik számomra az adott socketre érkező szolgáltatási kéréseket."

"A Socket osztály valójában egy kliens socket. Arra használjuk, hogy üzeneteket küldjünk egy másik socketnek, és megkapjuk a válaszokat."

"Így küldhetsz üzenetet a socketre:"

Példa
// 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();

– Az egész nagyon hasonlít egy fájl internetről való letöltéséhez.

– Ez azért van, fiam, mert ott is használnak aljzatokat.

"Az aljzatok minden, a hálózattal kapcsolatos dolog középpontjában állnak – nos, szinte mindenben."

" Itt további információkat olvashat "

– Köszönöm a leckét, Rishi.

"Még nem végeztem. Ez vágyálom."

"Most megvizsgáljuk, hogyan működik egy szerver socket."

– Ez egy kicsit bonyolultabb.

Példa
// 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();
}

– Néhány pontra szeretném felhívni a figyelmet.

"1. pont: Egy (kliens) socket létrehozásához meg kell adni egy IP-címet (vagy tartománynevet) és portot. Szerver socket létrehozásához csak egy portot kell megadni. A szerver socket csak azon a számítógépen létezik, ahol létrejött."

"2. pont: A ServerSocket osztálynak van egy accept() metódusa, amely bejövő kapcsolatra vár. Más szóval, a metódus mindaddig futni fog, amíg valamelyik kliens socket meg nem próbál csatlakozni. Ezután az accept() metódus elfogadja a kapcsolatot, létrehoz egy socketet. objektumot, hogy lehetővé tegye a kommunikációt, majd visszaadja ezt az objektumot."

"A Java programozó szemszögéből a socket két adatfolyam: egy InputStream, amelyből üzeneteket/adatokat olvas, és egy OutputStream, amelyre üzeneteket/adatokat ír."

"Amikor létrehoz egy kiszolgáló socketet, valójában egy portot hoz létre, amelyhez más számítógépek ügyfélfoglalatai csatlakozhatnak. Ehhez azonban meg kell adniuk a socketünk portszámát és a számítógépünk IP-címét. vagy a domain nevét."

"Íme egy érdekes példa a számodra. Megpróbálhatsz beleásni és futtatni:"

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

"Az egész lényege az, hogy egy kiszolgáló socket segítségével szuperprimitív webszervert írjunk, amelyet egyszerűen egy böngészőből érhet el."

"Hűha! Egy webszerver? Klassz! Nagyon alaposan áttanulmányozom."

– Köszönöm, Rishi.

"Ennyi, Amigo. Menj pihenni!"