"Hi, Amigo!"

"Hello, Rishi!"

"Ang paksa ng aralin ngayon ay mga socket."

"Alam mo na na ang bawat computer sa network ay may sariling natatanging IP address."

"Oo."

"Ngayon isipin na mayroon kang ilang mga computer, bawat isa ay nagpapatakbo ng isang dosenang mga programa na nag-a-access sa Internet: Skype, ICQ, atbp."

"At ang mga programang ito ay gustong makipag-usap sa isa't isa."

"Kailangan nating pigilan sila sa pakikialam sa isa't isa. Kailangan nating gawin ito para makakonekta ang Skype sa Skype, kumonekta ang Slack sa Slack, atbp."

"Tandaan kung paano nalutas ang problemang ito sa mga URL at web server?"

"Oo, nagdagdag kami ng mga port."

"Eksakto."

"Ito ay tulad ng paggawa ng isang bungkos ng mga maliliit na silid sa isang bahay at sinasabi na ang bahay ay isang gusali ng apartment. Ang bawat daungan ay parang isang hiwalay na apartment. "

"Kung ang isang IP address ay isang natatanging identifier para sa isang computer, kung gayon ang isang IP address na pinagsama sa isang port ay isang natatanging identifier para sa isang partikular na 'apartment' sa computer, kung saan maaaring manirahan ang isang program. "

"Ang natatanging lokasyong ito ay tinatawag na socket ."

"Ang isang socket ay may sariling natatanging numero na binubuo ng isang IP address at isang numero ng port. "

"Ah. Sa madaling salita, ang socket ay isang identifier para sa ilang virtual na lokasyon ng computer kung saan maaaring manirahan ang isang program? At ang isa pang program ay nagpapadala ng mga mensahe sa lokasyong ito, na nagbibigay-daan sa dalawang program na makipag-usap?"

"Hindi ko alam kung paano mo naintindihan iyon, ngunit iyon ay eksaktong tama."

"Sinabi sa akin ng aking robo-sense."

"Great. Then let me give you some details."

"Ang mga socket ay talagang ang pinakapangunahing at primitive na paraan para makipag-usap ang mga programa."

"May dalawang klase ang Java para sa pagtatrabaho sa mga socket. Sila ay Socket at ServerSocket ."

" Ang ServerSocket ay isang espesyal na klase na ang mga bagay ay kumakatawan sa server, ibig sabihin, hinahayaan nila ako ng mga kahilingan sa serbisyo na dumarating sa isang partikular na socket."

"Ang klase ng Socket ay talagang isang socket ng kliyente. Ginagamit namin ito upang magpadala ng mga mensahe sa isa pang socket at matanggap ang mga tugon."

"Narito kung paano magpadala ng mensahe sa isang socket:"

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

"Ang lahat ng ito ay halos kapareho sa pag-download ng isang file mula sa Internet."

"Yan, anak ko, ay dahil ginagamit din doon ang mga socket."

"Ang mga socket ay nasa gitna ng lahat ng nauugnay sa isang network — mabuti, halos lahat."

"Maaari mong basahin ang karagdagang impormasyon dito "

"Salamat sa leksyon, Rishi."

"Hindi pa ako tapos. Wishful thinking yan."

"Ngayon ay tutuklasin natin kung paano gumagana ang isang socket ng server."

"Medyo mas kumplikado."

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

"Gusto kong iguhit ang iyong pansin sa ilang mga punto."

"Punto 1: Upang lumikha ng isang (client) socket, kailangan mong tukuyin ang isang IP address (o domain name) at port. Upang lumikha ng isang socket ng server, kailangan mo lamang na tumukoy ng isang port. Ang server socket ay umiiral lamang sa computer kung saan Ito ay nabuo."

"Punto 2: Ang klase ng ServerSocket ay may accept() na paraan na naghihintay para sa isang papasok na koneksyon. Sa madaling salita, ang pamamaraan ay tatakbo magpakailanman hanggang sa ilang client socket ay sumubok na kumonekta. Pagkatapos ay tinatanggap ng accept() na paraan ang koneksyon, lumilikha ng socket object upang payagan ang komunikasyon, at pagkatapos ay ibabalik ang bagay na ito."

"Mula sa pananaw ng isang Java programmer, ang socket ay dalawang stream: isang InputStream kung saan ka nagbabasa ng mga mensahe/data, at isang OutputStream kung saan ka nagsusulat ng mga mensahe/data."

"Kapag gumawa ka ng socket ng server, talagang gumagawa ka ng port kung saan maaaring kumonekta ang mga socket ng client sa ibang mga computer. Ngunit para magawa ito, dapat nilang tukuyin nang tama ang port number ng aming socket at ang IP address ng aming computer. Well, o ang domain name nito."

"Narito ang isang kawili-wiling halimbawa para sa iyo. Maaari mong subukang hukayin ito at patakbuhin ito:"

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

"Ang buong punto doon ay ang paggamit ng isang socket ng server upang magsulat ng isang super primitive na web server na maaari mong ma-access mula lamang sa isang browser."

"Wow! Isang web server? Astig! Pag-aaralan ko itong mabuti."

"Salamat, Rishi."

"Yun lang, Amigo. Magpahinga ka na!"