"Hej, Amigo!"

"Hej, Rishi!"

"Emnet for dagens lektion er stikkontakter."

"Du ved allerede, at hver computer på netværket har sin egen unikke IP-adresse."

"Ja."

"Forestil dig nu, at du har flere computere, der hver kører et dusin programmer, der får adgang til internettet: Skype, ICQ osv."

"Og disse programmer vil gerne kommunikere med hinanden."

"Vi er nødt til at forhindre dem i at forstyrre hinanden. Vi skal gøre det, så Skype forbinder med Skype, Slack forbinder med Slack osv."

"Husk, hvordan dette problem blev løst med URL'er og webservere?"

"Ja, vi tilføjede porte."

"Nemlig."

"Det er ligesom at lave en masse små værelser i et hus og sige, at huset er en lejlighedsbygning. Hver havn er som en separat lejlighed. "

"Hvis en IP-adresse er en unik identifikator for en computer, så er en IP-adresse kombineret med en port en unik identifikator for en bestemt 'lejlighed' i computeren, hvor et program kan opholde sig. "

"Denne unikke placering kaldes en stikkontakt ."

"En socket har sit eget unikke nummer, der består af en IP-adresse og et portnummer. "

"Ah. Med andre ord er en socket en identifikator for en eller anden virtuel computerplacering, hvor et program kan opholde sig? Og et andet program sender beskeder til denne placering, som lader de to programmer kommunikere?"

"Jeg ved ikke, hvordan du har forstået det, men det er helt rigtigt."

"Min robo-sans fortalte mig."

"Fantastisk. Så lad mig give dig nogle detaljer."

"Sockets er faktisk den mest grundlæggende og primitive måde for programmer at kommunikere på."

"Java har to klasser til at arbejde med sockets. De er Socket og ServerSocket ."

" ServerSocket er en speciel klasse, hvis objekter repræsenterer serveren, dvs. de lader mig serviceanmodninger, der ankommer på en bestemt socket."

" Socket- klassen er faktisk en klientsocket. Vi bruger den til at sende beskeder til en anden socket og modtage svarene."

"Sådan sender du en besked til en socket:"

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

"Det hele minder meget om at downloade en fil fra internettet."

"Det, min dreng, er fordi der også bruges stikkontakter der."

"Sockets ligger i hjertet af alt, der er forbundet med et netværk - ja, næsten alt."

"Du kan læse yderligere information her "

"Tak for lektionen, Rishi."

"Jeg er ikke færdig endnu. Det er ønsketænkning."

"Nu vil vi undersøge, hvordan en serversocket fungerer."

"Det er lidt mere kompliceret."

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

"Jeg vil gerne henlede din opmærksomhed på et par punkter."

"Punkt 1: For at oprette en (klient) socket skal du angive en IP adresse (eller domænenavn) og port. For at oprette en server socket behøver du kun at angive en port. Server socket findes kun på den computer, hvor det blev skabt."

"Punkt 2: ServerSocket-klassen har en accept()-metode, der venter på en indgående forbindelse. Med andre ord vil metoden køre for evigt, indtil en klientsocket forsøger at oprette forbindelse. Så accepterer accept()-metoden forbindelsen, opretter en socket objekt for at tillade kommunikation, og returnerer derefter dette objekt."

"Fra en Java-programmørs synspunkt er en socket to streams: en InputStream, hvorfra du læser beskeder/data, og en OutputStream, som du skriver beskeder/data til."

"Når du opretter en server socket, laver du faktisk en port, som klientsockets på andre computere kan oprette forbindelse til. Men for at gøre dette skal de angive portnummeret på vores socket korrekt og IP-adressen på vores computer. Nå, eller dets domænenavn."

"Her er et interessant eksempel til dig. Du kan prøve at grave i det og køre det:"

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

"Hele pointen er at bruge en server socket til at skrive en super primitiv webserver, som du kan få adgang til fra en browser."

"Wow! En webserver? Fedt! Jeg vil studere det meget omhyggeligt."

"Tak, Rishi."

"Det er alt, Amigo. Slap af!"