Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 62 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
62
Dung lượng
4,19 MB
Nội dung
Chương : LẬP TRÌNH SOCKET VỚI TCP Mơ hình Client/Server Các kiến trúc Client/Server Mơ hình truyền tin socket Socket cho Client Lớp ServerSocket Cài đặt chương trình Client Cài đặt chương trình Server Đa tuyến lập trình Java MƠ HÌNH CLIENT/SERVER + Thuật ngữ Client/Server xuất vào đầu thập niên 80 + Dạng phổ biến mô hình ứng dụng phân tán + Mơ hình mạng + Đa số ứng dụng mạng dựa theo mơ hình + Một số ứng dụng Client/Server phổ biến - Email - FTP - Web - … MƠ HÌNH CLIENT/SERVER + Mơ hình client/server cung cấp cách tiếp cận tổng quát để chia sẻ tài nguyên hệ thống phân tán + Cả tiến trình client tiến trình server chạy máy tính + Một tiến trình server sử dụng dịch vụ server khác + Mơ hình truyền tin client/server hướng tới việc cung cấp dịch vụ MƠ HÌNH CLIENT/SERVER Quá trình trao đổi liệu bao gồm: +Bước : Truyền yêu cầu từ tiến trình client tới tiến trình server + Bước : Yêu cầu server xử lý + Bước : Truyền đáp ứng cho client MƠ HÌNH CLIENT/SERVER + Mơ hình truyền tin liên quan đến việc truyền hai thông điệp đồng hóa client server + Ở bước 1, tiến trình server phải nhận thức thơng điệp u cầu đến hành động phát yêu cầu client phải tạm dừng + Ở bước 3, tiến trình client trạng thái chờ nhận đáp ứng server gửi MƠ HÌNH CLIENT/SERVER Mơ hình client/server thường cài đặt dựa thao tác gửi (send) nhận (receive) Client Server Request message Wait Reply Execution Request message Tiến trình xử lý Tiến trình phong tỏa MƠ HÌNH CLIENT/SERVER Chế độ bị phong tỏa (blocked): + Khi tiến trình client server phát lệnh gửi liệu (send), việc thực thi tiến trình bị tạm ngừng tiến trình nhận phát lệnh nhận liệu (receive) + Tương tự tiến trình nhận liệu, tiến trình client server phát lệnh nhận liệu, mà thời điểm chưa có liệu gửi tới việc thực thi tiến trình bị tạm ngừng có liệu gửi tới MƠ HÌNH CLIENT/SERVER Chế độ khơng bị phong tỏa (non-blocked) + Trong chế độ này, tiến trình client hay server phát lệnh gửi liệu thực sự, việc thực thi tiến trình tiến hành mà khơng quan tâm đến việc có tiến trình phát lệnh nhận liệu hay khơng + Tương tự cho trường hợp nhận liệu, tiến trình phát lệnh nhận liệu, nhận liệu có, việc thực thi tiến trình tiến hành mà không quan tâm đến việc có tiến trình phát lệnh gửi liệu hay không CÁC KIẾN TRÚC CLIENT/SERVER 2.1 Client/Server hai tầng 2.2 Client/Server ba tầng 2.3 Kiến trúc n-tầng CÁC KIẾN TRÚC CLIENT/SERVER 2.1 Client/Server hai tầng : Lớp ServerSocket 5.2 Chấp nhận ngắt liên kết public InetAddress getInetAddress() + Phương thức trả địa sử dụng server (localhost) Nếu localhost có địa IP, địa trả phương thức InetAddress.getLocalHost() Ví dụ: try{ ServerSocket sk = new ServerSocket(80); InetAddress ia = sk.getInetAddress(); }catch(IOException e){} public int getLocalHost() + Các contructor ServerSocket cho phép ta nghe liệu cổng không định trước cách gán số cho cổng Phương thức cho phép ta tìm cổng mà server nghe 6.6 Cài đặt chương trình Client Sau tìm hiểu lớp phương thức cần thiết để cài đặt chương trình Socket Các bước để cài đặt chương trình Client Bước 1:Tạo đối tượng Socket Socket client =new Socket(“hostname”,portName); Bước 2:Tạo luồng xuất để sử dụng để gửi thông tin tới Socket PrintWriter out=new PrintWriter(client.getOutputStream(),true); Bước 3:Tạo luồng nhập để đọc thông tin đáp ứng từ server BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); 6.6 Cài đặt chương trình Client Sau tìm hiểu lớp phương thức cần thiết để cài đặt chương trình Socket.Các bước để cài đặt chương trình Client Bước 4:Thực thao tác vào/ra với luồng nhập luồng xuất Đối với luồng xuất, PrintWriter, ta sử dụng phương thức print println, tương tự System.out.println Đối với luồng nhập, BufferedReader, ta sử dụng phương thức read() để đọc ký tự, mảng ký tự, gọi phương thức readLine() để đọc vào dòng ký tự Cần ý phương thức readLine() trả null kết thúc luồng Bước 5: Đóng socket hồn thành q trình truyền tin 6.7 Cài đặt chương trình Server Để cài đặt chương trình Server ServerSocket ta thực bước sau: Bước : Tạo đối tượng ServerSocket ServerSocket ss=new ServerSocket(port) Bước 2: Tạo đối tượng Socket cách chấp nhận liên kết từ yêu cầu liên kết client Sau chấp nhận liên kết, phương thức accept() trả đối tượng Socket thể liên kết Client Server while(condion) { Socket s=ss.accept(); doSomething(s); } Người ta khuyến cáo nên giao công việc xử lý đối tượng s cho tuyến đoạn Bước 3: Tạo luồng nhập để đọc liệu từ client BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream())); 6.7 Cài đặt chương trình Server Để cài đặt chương trình Server ServerSocket ta thực bước sau: Bước 4: Tạo luồng xuất để gửi liệu trở lại cho server PrintWriter pw=new PrintWriter(s.getOutputStream(),true); Trong tham số true sử dụng để xác định luồng tự động đẩy Bước 5: Thực thao tác vào với luồng nhập luồng xuất Bước 6: Đóng socket s truyền tin xong Việc đóng socket đồng nghĩa với việc đóng luồng 6.8 Đa tuyến lập trình Java + Các server viết quản lý client thời điểm + Khi khối lượng công việc mà server cần xử lý yêu cầu client lớn trước thời điểm hồn thành cơng việc xử lý server khơng thể chấp nhận + Để khắc phục điều này, người ta quản lý phiên client tuyến đoạn riêng, cho phép server làm việc với nhiều client đồng thời + Server gọi server tương tranh tạo tuyến đoạn để quản lý yêu cầu, sau tiếp tục lắng nghe client khác 6.8 Đa tuyến lập trình Java + Các server đơn tuyến đoạn quản lý liên kết thời điểm + Trong thực tế server phải quản lý nhiều liên kết lúc + Để thực điều server chấp nhận liên kết chuyển liên kết cho tuyến xử lý + Trong phần xem xét cách tiến hành cài đặt chương trình client/server đa tuyến 6.8 Đa tuyến lập trình Java Chương trình phía Server import java.io.*; import java.net.*; class EchoServe extends Thread { private Socket socket; private BufferedReader in; private PrintWriter out; public EchoServe (Socket s) throws IOException { socket = s; System.out.println("Serving: "+socket); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())), true); start(); } 6.8 Đa tuyến lập trình Java Chương trình phía Server private static String VuaHoaVuaThuong(String s3) { int k =0; int i; char c; String st3=""; k = s3.length(); for(i=0;i='A'&& c=‘a'&& c