"Bună, Amigo!"

— Bună, Rishi!

„Subiectul lecției de astăzi este prizele”.

„Știi deja că fiecare computer din rețea are propria sa adresă IP unică.”

"Da."

„Acum imaginați-vă că aveți mai multe computere, fiecare rulând o duzină de programe care accesează Internetul: Skype, ICQ etc.”

„Și aceste programe vor să comunice între ele”.

„Trebuie să îi împiedicăm să interfereze unul cu celălalt. Trebuie să facem ca Skype să se conecteze cu Skype, Slack să se conecteze cu Slack etc.”

„Îți amintești cum a fost rezolvată această problemă cu adresele URL și serverele web?”

„Da, am adăugat porturi”.

"Exact."

„Este ca și cum ai face o grămadă de camere mici într-o casă și ai spune că casa este un bloc de apartamente. Fiecare port este ca un apartament separat.

„Dacă o adresă IP este un identificator unic pentru un computer, atunci o adresă IP combinată cu un port este un identificator unic pentru un anumit „apartament” din computer, unde poate locui un program.

„Această locație unică se numește priză .”

„Un socket are propriul său număr unic care constă dintr-o adresă IP și un număr de port.

"Ah. Cu alte cuvinte, un socket este un identificator pentru o locație de computer virtuală în care poate locui un program? Și un alt program trimite mesaje către această locație, care permite celor două programe să comunice?"

— Nu știu cum ai înțeles asta, dar este exact.

— Mi-a spus robotul meu.

— Minunat. Atunci hai să-ți dau câteva detalii.

„Socketurile sunt de fapt cea mai elementară și primitivă modalitate de comunicare a programelor.”

„Java are două clase pentru lucrul cu socket-uri. Sunt Socket și ServerSocket .”

" ServerSocket este o clasă specială ale cărei obiecte reprezintă serverul, adică îmi permit solicitări de service care ajung pe un anumit socket."

„ Clasa Socket este de fapt un socket client. O folosim pentru a trimite mesaje către un alt socket și a primi răspunsurile.”

„Iată cum să trimiteți un mesaj către un socket:”

Exemplu
// 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();

„Totul este foarte asemănător cu descărcarea unui fișier de pe Internet”.

— Asta, băiete, se datorează faptului că acolo se folosesc și prize.

„Prizele se află în centrul a tot ceea ce este asociat cu o rețea – ei bine, aproape totul.”

„Puteți citi informații suplimentare aici

— Mulțumesc pentru lecție, Rishi.

— Încă nu am terminat. Asta e o dorință.

„Acum vom explora cum funcționează un socket de server.”

„Este un pic mai complicat”.

Exemplu
// 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();
}

„Vreau să vă atrag atenția asupra câteva puncte”.

„Punctul 1: Pentru a crea un socket (client), trebuie să specificați o adresă IP (sau un nume de domeniu) și un port. Pentru a crea un socket de server, trebuie doar să specificați un port. Soclu-ul serverului există doar pe computerul unde a fost creat."

„Punctul 2: clasa ServerSocket are o metodă accept() care așteaptă o conexiune de intrare. Cu alte cuvinte, metoda va rula pentru totdeauna până când un socket client încearcă să se conecteze. Apoi metoda accept() acceptă conexiunea, creează un socket. obiect pentru a permite comunicarea, apoi returnează acest obiect."

„Din punctul de vedere al unui programator Java, un socket este două fluxuri: un InputStream din care citești mesaje/date și un OutputStream în care scrii mesaje/date.”

„Când creați un socket de server, faceți de fapt un port la care socket-urile client de pe alte computere se pot conecta. Dar pentru a face acest lucru, trebuie să specifice corect numărul portului socket-ului nostru și adresa IP a computerului nostru. Ei bine, sau numele său de domeniu."

„Iată un exemplu interesant pentru tine. Puteți încerca să-l căutați și să îl rulați:”

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

„Întregul scop este să folosiți un socket de server pentru a scrie un server web super primitiv pe care îl puteți accesa pur și simplu dintr-un browser.”

"Uau! Un server web? Mișto! O să-l studiez cu mare atenție."

— Mulțumesc, Rishi.

"Asta e tot, Amigo. Du-te relaxeaza-te!"