– 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:"
// 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.
// 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!"
GO TO FULL VERSION