Vinh La Kiến

48 bundles
2 files4 months ago
2

Java Socket Code Demo

Java Socket Code Demo

Java Socket Client

Code mẫu Java Socket Client

12345678910111213141516171819202122232425262728
package com.company; import java.io.*; import java.net.UnknownHostException; import java.net.*; public class Main { public static void main(String[] args) throws FileNotFoundException, InterruptedException, UnknownHostException { Socket socket = null; try { socket = new Socket("time.nist.gov", 13); socket.setSoTimeout(15000); InputStream in = socket.getInputStream(); StringBuilder buffer = new StringBuilder(); InputStreamReader reader = new InputStreamReader(in, "ASCII"); for (int c = reader.read(); c != -1; c = reader.read()) { buffer.append((char)c); } System.out.println(buffer); } catch (IOException e) { e.printStackTrace(); } } }

Giải thích

Dòng 9: Đối tượng socket là đối tượng sẽ chịu trách nhiệm tạo, giữ kết nối và gửi nhận dữ liệu (diễn nôm thì nó chứa các phương thức để làm mọi thứ về mạng, lưu ý mọi thứ chứ cũng không hẵng tất cả).
Socket socket = null;

Dòng 12: khởi tạo socket và truyền địa chỉ và port cần thiết vào, phía server với địa chỉ đó và chương trình trên server với port đó đang mở và chờ đợi kết nối, hiện tại mình sẽ kết nối vào. => time.nist.gov là của 1 tổ chức họ thiết lập sẵn cái server để mình lấy thời gian về, lời giải thích này dành cho các bạn thắc mắc cái server đó ở đâu. Chỗ này có thể truyền IP vào hoặc tên miền, trong trường hợp này truyền tên miền.
socket = new Socket("time.nist.gov", 13);

Dòng 15: dường như cái gì dính tới đọc ghi dữ liệu Java sẽ cố gắng tổ chức nó thành 2 khái niệm là InputStream và OutputStream. Do đó, socket cũng sẽ trả về 2 đối tượng dạng như vầy để trường hợp ta nhận dữ liệu từ phía bên gửi hoặc gửi đi.
InputStream in = socket.getInputStream();

Suy đoán sẽ tồn tại OutputStream out = socket.getOutputStream(); dành cho mục đích gửi dữ liệu đi, trong code demo này, server là của người ta nên mình không thể gửi gì được do người ta cũng không nhận đâu. Khi mình viết server của mình thì mình sẽ viết phần nhận dữ liệu.

Dòng 17: InputStream khác với InputStreamReader ở chỗ InputStream sẽ trả về nhị phân, còn InputStreamReader trả về chuỗi, trong demo này người viết sẽ nhận về chuỗi nên họ dùng InputStreamReader.
InputStreamReader reader = new InputStreamReader(in, "ASCII");

Dòng 19 đến 21: dữ liệu được đọc vào theo kiểu đọc tới khi nào hết thì thôi, InputStream sẽ thực hiện việc kéo và đẩy dữ liệu cho mình, mình phải nhận và lưu lại vào chương trình (biến c, biến buffer) để sử dụng.