"Chào, Amigo!"

"Xin chào, Rishi!"

"Chủ đề của bài học hôm nay là ổ cắm."

"Bạn đã biết rằng mọi máy tính trên mạng đều có địa chỉ IP duy nhất của riêng mình."

"Chuẩn rồi."

"Bây giờ hãy tưởng tượng bạn có nhiều máy tính, mỗi máy chạy hàng tá chương trình truy cập Internet: Skype, ICQ, v.v."

"Và các chương trình này muốn giao tiếp với nhau."

"Chúng ta cần ngăn chúng can thiệp lẫn nhau. Chúng ta cần làm sao để Skype kết nối với Skype, Slack kết nối với Slack, v.v."

"Bạn có nhớ vấn đề này đã được giải quyết như thế nào với URL và máy chủ web không?"

"Vâng, chúng tôi đã thêm cổng."

"Chính xác."

"Giống như làm một loạt các phòng nhỏ trong một ngôi nhà và nói rằng ngôi nhà là một khu chung cư. Mỗi cổng giống như một căn hộ riêng biệt. "

"Nếu địa chỉ IP là mã định danh duy nhất cho máy tính, thì địa chỉ IP kết hợp với cổng là mã định danh duy nhất cho một 'căn hộ' nhất định trong máy tính, nơi chương trình có thể cư trú. "

"Vị trí duy nhất này được gọi là ổ cắm ."

"Một ổ cắm có số duy nhất của riêng nó bao gồm địa chỉ IP và số cổng. "

"À. Nói cách khác, ổ cắm là một định danh cho một số vị trí máy tính ảo nơi một chương trình có thể cư trú? Và một chương trình khác sẽ gửi tin nhắn đến vị trí này, cho phép hai chương trình giao tiếp?"

"Tôi không biết làm thế nào bạn hiểu điều đó, nhưng điều đó hoàn toàn chính xác."

"Giác quan người máy của tôi đã nói với tôi."

"Tuyệt. Vậy thì để tôi kể cho bạn nghe một số chi tiết."

"Ổ cắm thực sự là cách cơ bản và nguyên thủy nhất để các chương trình giao tiếp."

"Java có hai lớp để làm việc với socket. Chúng là SocketServerSocket ."

" ServerSocket là một lớp đặc biệt có các đối tượng đại diện cho máy chủ, tức là chúng cho phép tôi phục vụ các yêu cầu đến trên một ổ cắm cụ thể."

" Lớp Socket thực sự là một ổ cắm máy khách. Chúng tôi sử dụng nó để gửi tin nhắn đến một ổ cắm khác và nhận phản hồi."

"Đây là cách gửi tin nhắn đến một ổ cắm:"

Ví dụ
// 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();

"Tất cả đều rất giống với việc tải xuống một tệp từ Internet."

"Đó, chàng trai của tôi, là bởi vì ổ cắm cũng được sử dụng ở đó."

"Ổ cắm nằm ở trung tâm của mọi thứ liên quan đến mạng - tốt, gần như mọi thứ."

"Bạn có thể đọc thêm thông tin tại đây "

"Cảm ơn vì bài học, Rishi."

"Tôi vẫn chưa xong. Đó là mơ tưởng."

"Bây giờ chúng ta sẽ khám phá cách hoạt động của ổ cắm máy chủ."

"Phức tạp hơn một chút."

Ví dụ
// 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();
}

"Tôi muốn thu hút sự chú ý của bạn vào một vài điểm."

"Điểm 1: Để tạo ổ cắm (máy khách), bạn cần chỉ định địa chỉ IP (hoặc tên miền) và cổng. Để tạo ổ cắm máy chủ, bạn chỉ cần chỉ định cổng. Ổ cắm máy chủ chỉ tồn tại trên máy tính nơi Nó đã được tạo ra."

"Điểm 2: Lớp ServerSocket có phương thức accept() chờ kết nối đến. Nói cách khác, phương thức này sẽ chạy mãi mãi cho đến khi một số ổ cắm máy khách cố gắng kết nối. Sau đó, phương thức accept() chấp nhận kết nối, tạo một ổ cắm đối tượng để cho phép giao tiếp, rồi trả về đối tượng này."

"Từ quan điểm của một lập trình viên Java, một ổ cắm là hai luồng: một InputStream mà bạn đọc tin nhắn/dữ liệu và một OutputStream mà bạn viết tin nhắn/dữ liệu."

"Khi bạn tạo một ổ cắm máy chủ, thực tế là bạn đang tạo một cổng mà các ổ cắm máy khách trên các máy tính khác có thể kết nối. Nhưng để làm được điều này, họ phải chỉ định chính xác số cổng của ổ cắm và địa chỉ IP của máy tính của chúng ta. Chà, hoặc tên miền của nó."

"Đây là một ví dụ thú vị dành cho bạn. Bạn có thể thử đào sâu vào nó và chạy nó:"

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

"Toàn bộ vấn đề là sử dụng ổ cắm máy chủ để viết một máy chủ web siêu nguyên thủy mà bạn có thể truy cập đơn giản từ trình duyệt."

"Chà! Một máy chủ web? Tuyệt! Tôi sẽ nghiên cứu thật kỹ."

"Cám ơn Rishi."

"Đó là tất cả, Amigo. Hãy thư giãn đi!"