"Hei, Amigo!"

"Hei, Rishi!"

"Temaet for dagens leksjon er stikkontakter."

"Du vet allerede at hver datamaskin på nettverket har sin egen unike IP-adresse."

"Japp."

"Se for deg at du har flere datamaskiner, som hver kjører et dusin programmer som har tilgang til Internett: Skype, ICQ, etc."

"Og disse programmene ønsker å kommunisere med hverandre."

"Vi må stoppe dem fra å forstyrre hverandre. Vi må gjøre det slik at Skype kobles til Skype, Slack kobles til Slack, osv.."

"Husker du hvordan dette problemet ble løst med URL-er og webservere?"

"Ja, vi la til porter."

"Nøyaktig."

"Det er akkurat som å lage en haug med små rom i et hus og si at huset er en bygård. Hver havn er som en egen leilighet. "

"Hvis en IP-adresse er en unik identifikator for en datamaskin, så er en IP-adresse kombinert med en port en unik identifikator for en viss "leilighet" i datamaskinen, der et program kan ligge. "

"Denne unike plasseringen kalles en stikkontakt ."

"En socket har sitt eget unike nummer som består av en IP-adresse og et portnummer. "

"Ah. Med andre ord, en socket er en identifikator for en virtuell datamaskinplassering der et program kan ligge? Og et annet program sender meldinger til denne plasseringen, som lar de to programmene kommunisere?"

"Jeg vet ikke hvordan du forsto det, men det er helt riktig."

"Robo-sansen min fortalte meg."

"Flott. Så la meg gi deg noen detaljer."

"Sockets er faktisk den mest grunnleggende og primitive måten for programmer å kommunisere på."

"Java har to klasser for arbeid med sockets. De er Socket og ServerSocket ."

" ServerSocket er en spesiell klasse hvis objekter representerer serveren, dvs. de lar meg tjenesteforespørsler som kommer på en bestemt socket."

" Socket- klassen er faktisk en klientsocket. Vi bruker den til å sende meldinger til en annen socket og motta svarene."

"Slik sender du en melding til en stikkontakt:"

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 er veldig likt å laste ned en fil fra Internett."

"Det, gutten min, er fordi det brukes stikkontakter der også."

"Sockets ligger i hjertet av alt knyttet til et nettverk - vel, nesten alt."

"Du kan lese mer informasjon her "

"Takk for leksjonen, Rishi."

"Jeg er ikke ferdig ennå. Det er ønsketenkning."

"Nå skal vi utforske hvordan en serversocket fungerer."

— Det er litt mer komplisert.

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 gjøre deg oppmerksom på et par punkter."

"Punkt 1: For å opprette en (klient)-socket, må du spesifisere en IP-adresse (eller domenenavn) og port. For å opprette en server-socket trenger du bare å spesifisere en port. Server-socket eksisterer kun på datamaskinen der det ble skapt."

"Punkt 2: ServerSocket-klassen har en accept()-metode som venter på en innkommende tilkobling. Med andre ord vil metoden kjøre for alltid til en klientsocket prøver å koble seg til. Deretter aksepterer()-metoden tilkoblingen, lager en socket objekt for å tillate kommunikasjon, og returnerer deretter dette objektet."

"Fra en Java-programmerers synspunkt er en socket to strømmer: en InputStream som du leser meldinger/data fra, og en OutputStream som du skriver meldinger/data til."

"Når du oppretter en serversocket, lager du faktisk en port som klientsockets på andre datamaskiner kan koble til. Men for å gjøre dette, må de spesifisere portnummeret til sokkelen vår og IP-adressen til datamaskinen vår. Vel, eller domenenavnet."

"Her er et interessant eksempel for deg. Du kan prøve å grave i det og kjøre det:"

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

"Hele poenget er å bruke en serversocket for å skrive en super primitiv webserver som du enkelt kan få tilgang til fra en nettleser."

"Wow! En webserver? Kult! Jeg skal studere den veldig nøye."

"Takk, Rishi."

"Det var alt, Amigo. Slapp av!"