Tóm Tắt
– Nội dung chính: Lý thuyết:
2. Xây dựng ứng dụng Client/Server *Mô hình Client – server
*Mô hình Client – server
• Khi nói tới lập trình mạng ta thường nghĩ đến cách trao đổi giữa một
chương trình phục vụ (Server) với một hay nhiều chương trình khách
(Client).
• Chương trình khách gửi một yêu cầu tới cho chương trình phục vụ, và
chương trình này xử lý dữ liệu để trả lời cho chương trình khách.
• Như vậy, chương trình khách muốn gửi được yêu cầu thì trước hết phải
tìm cách kết nối với Server. Server có thể chấp nhận hay từ chối sự kết
nối này.
• Một khi sự kết nối đã được thiết lập thì Client và Server trao đổi với nhau
thông qua Sockets.
* Phục vụ nhiều chương trình Client
• Cùng một lúc, một chương trình Server có thể trao đổi với nhiều chương
trình Client. Server chạy thường trực trên máy chủ và các chương trình
Client trên mạng có thể kết nối với Server bất kỳ lúc nào.
• Để Server có thể kết nối đồng thời với nhiều Client thì ta có thể sử dụng
các luồng để thực hiện. Server thiết lập việc kết nối với nhiều Client như
sau.
while(true){
Socket connectToClient = serverSocket.accept();
Thread thread = new ThreadClass(connectToClient);
thread.start();
}
• Trong khi trao đổi với nhau, nhiều khi ta muốn biết ai kết nối với Server.
Muốn biết về chương trình khách ta sử dụng lớp InetAddress để biết được
tên miền (host name) và địa chỉ IP.
InetAddress clientInetAddress = connectToClient.getInetAddress();
System.out.println(“Host name cua Client: ” + clientNo + ” la ” +
clientInetAddress.getHostName());
System.out.println(“Dia chi IP cua Client: ” + clientNo + ” la ” +
clientInetAddress.getHostAddress());
– Xem ví dụ: InetAdd.java
Lưu ý: Mô hình Client-Server nêu trên đều sử dụng hướng kết nối. Đầu
tiên Server được khởi động và chờ đợi một sự kết nối từ Client. Sau khi kết nối
được thiết lập, hai bên luân phiên nhau gửi, nhận dữ liệu thông qua đường
truyền như hình sau
* Mô hình client – server sử dụng dịch vụ không kết nối
• UDP Server:
DatagramSocket serverSocket = new DatagramSocket(9876);
receiveData = new byte[1024];
DatagramPacket receivePacket =
System.out.println (“Waiting for datagram packet”);
serverSocket.receive (receivePacket);
• UDP Client:
String serverHostname = new String (“127.0.0.1”);
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName(serverHostname);
byte[] sendData;// = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send ( sendPacket);
Nội dung thảo luận: Ứng dụng mô hình client – server trong thực tế.
Nội dung tự học:
Bài tập (bắt buộc, mở rộng): Xây dựng:
– Chương trình Client nhận dữ liệu bán kính hình tròn từ bán phím,
gửi lên cho Server.
– Server nhận dữ liệu này, tính diện tích của hình tròn và sau đó gửi
kết quả lại cho chương trình khách.
– Client nhận giá trị diện tích và in ra màn hình
– Xem ví dụ: Server.java; Client.java
– Yêu cầu SV chuẩn bị: Đọc trước bài giảng ở nhà
Đọc trước bài giảng ở nhà
Chú ý nghe giảng.
Tích cực tham gia phát biểu ý kiến
– Ghi chú:
*Tài liệu tham khảo
[1] Java Tập 1. Phương Lan, Lao động – Xã hội, 2006.
[2] Java Tập 2. Phương Lan, Hoàng Đức Hải, Lao động – Xã hội, 2006.
[3] Java All-In-One Desk Reference For Dummies, 2nd Edition. Doug
Loweand, Barry Burd, John Wiley & Sons , 2007
[4] Java™ How to Program, Sixth Edition. H. M. Deitel – Deitel, P. J. Deitel,
Prentice Hall, 2004.
[5] Object Oriented With Java. Kenneth A. Lambert, Martin Oshorne,
Prentice Hall, 2003.
* Câu hỏi ôn tập:
– Mô hình client – server?
– Các lớp trong java.net ?