Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
106,16 KB
Nội dung
1 Lập trình socket Socket API ❒ ðưa ra trong BSD4.1 UNIX, 1981 ❒ Cho phép ứng dụng tạo ra và sử dụng socket ❒ Nguyên lý client/server ❒ Có hai dạng socket Truyền gói tin, không tin cậy Truyền dòng bytes, tin cậy Là giao diện (cửa) do ứ ng d ụ ng t ạ o ra trên máy tr ạ m, qu ả n lý b ớ i OS qua ñó các ứng dụng có thể gửi và nhận thông ñiệp ñến/từ các ứng dụng khác socket M ụ c ñ ích: làm th ế nào ñể xây d ự ng các ứ ng d ụ ng client/server truy ề n d ữ li ệ u qua socket 2 Lập trình socket vớiTCP Socket: c ử a giao ti ế p gi ữ a các ti ế n trình và giao th ứ c giao v ậ n (UCP ho ặ c TCP) D ị ch v ụ TCP: truy ề n các bytes tin c ậ y t ừ m ộ t ti ế n trình ñế n các ti ế n trình khác Tiến trình TCP với Bộ ñệm, Các biến socket ðiều khiển bới Lập trình viên ðiều khiển bởi Hệ ñiều hành Máy trạm, máy chủ Tiến trình TCP với Bộ ñệm, Các biến socket internet ðiều khiển bới Lập trình viên ðiều khiển bởi Hệ ñiều hành Máy trạm, máy chủ 3 Lập trình socket với TCP Client phải gửi yêu cầu tới server ❒ Tiến trình máy chủ phải ñang ñược thực hiện ❒ máy chủ phải mở socket (cổng) ñể nhận yêu cầu từ client Client yêu cầu server bằng cách: ❒ Tạo một socket TCP trên máy ❒ Chỉ rõ IP address & port number của tiến trình máy chủ ❒ Khi client tạo socket: client TCP tạo liên kết tới server TCP ❒ khi ñược client liên lạc, server TCP tạo socket mới ñể tiến trình máy chủ giao tiếp với client cho phép nói chuyện với nhiều clients phân biệt client bằng số hiệu cổng (chương 3…) TCP cung c ấ p d ị ch v ụ truy ề n dòng bytes tin c ậ y và có th ứ t ự gi ữ a client và server ðối với ứng dụng 4 Tương tác giữa client/server qua socket TCP chờ yêu cầu tới connectionSocket = welcomeSocket.accept() tạo socket, port=x, cho yêu cầu tới: welcomeSocket = ServerSocket() tạo socket, kết nối tới hostid, port=x clientSocket = Socket() ñóng socket connectionSocket ñọc trả lời tại clientSocket ñóng clientSocket Server (máy hostid) Client gửi yêu cầu từ clientSocket nhận yêu cầu từ connectionSocket trả lời tại connectionSocket Tạo liên kết TCP 5 outToServer to network from network inFromServer inFromUser keyboard monitor Process clientSocket input stream input stream output stream TCP socket Client process client TCP socket Stream ❒ stream một chuỗi ký tự vào/ra một tiến trình. ❒ input stream ñược gắn với một nguồn vào, e.g. bàn phím, socket ❒ output stream ñược gắn với một nguồn ra, e.g., màn hình socket. 6 Lập trình socket với TCP Ví dụ về ứng dụng client-server: 1) client ñọ c các dòng v ă n b ả n do ng ườ i dùng gõ t ừ bàn phím (inFromUser stream) , g ử i t ớ i server qua socket (outToServer stream) 2) server ñọ c các dòng g ử i t ừ socket 3) server chuy ể n sang ch ữ hoa và g ử i tr ả l ạ i cho client 4) client ñọ c và in l ạ i dòng v ă n b ả n nh ậ n ñượ c t ừ socket (inFromServer stream) 7 Ví dụ: Java client (TCP) import java.io.*; import java.net.*; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); Tạo input stream Tạo client socket, nối tới server Tạo output stream nối tới socket 8 Ví dụ: Java client (TCP), cont. BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println ("FROM SERVER: " + modifiedSentence ); clientSocket.close(); } } tạo input stream nối tới socket Gửi tới server ñọc tin từ server 9 Ví dụ: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); Tạo socket chờ tại port 6789 chờ yêu cầu từ client tạo input stream, nối tới socket 10 Ví dụ: Java server (TCP), cont DataOutputStream outToClient = new DataOutputStream (connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } } ñọc thông tin từ socket tạo output stream nối tới socket ghi ra socket kết thúc while loop và chờ yêu cầu từ client khác [...].. .Chương 2: T ng ng d ng Ì 2.1 Nguyên lý c a các Ì 2.6 L p trình socket v i ng d ng m ng Ì 2.2 Web và HTTP Ì 2.3 FTP – File Transfer Protocol Ì 2.4 Electronic Mail TCP Ì 2.7 L p trình socket v i UDP SMTP, POP3, IMAP Ì 2.5 DNS 11 L p trình socket v i UDP UDP: không có liên k t gi a client và Ì không có giai ño n b t tay Ì bên g i ch rõ IP address và port number c a phía nh n... server s tìm ñ a ch IP và s hi u c ng tương ng bên trong gói tin ð i v i ng d ng UDP cung c p d ch v truy n d li u không tin c y gi a client và server UDP: các gói tin có th b m t ho c ñ n không theo th t 12 Tương tác client/server qua UDP socket Server (máy hostid) t o socket, port=x, cho các y/c ñ n: serverSocket = DatagramSocket() Client t o socket, clientSocket = DatagramSocket() t o gói tin, ñ/c... clientSocket socket to network UDP socket from network 14 Ví d : Java client (UDP) import java. io.*; import java. net.*; T o input stream T o client socket chuy n ñ i hostname -> IP s d ng DNS class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket(); InetAddress... String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } 16 Ví d : Java server (UDP) import java. io.*; import java. net.*; T o datagram socket t i c ng 9876 class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024];... clientSocket ñ c y/c t serverSocket ghi tr l i lên serverSocket ch rõ ñ/c, c ng c a client ñ c tr l i t i clientSocket ñóng clientSocket 13 Ví d : Java client (UDP) input stream Client process monitor inFromUser keyboard Process Input: ñ c gói tin (nh c l i: TCP g i “byte stream”) UDP packet receivePacket (nh c l i: TCP g i “byte stream”) sendPacket Output: g i gói tin UDP packet client UDP clientSocket... = sentence.getBytes(); 15 Ví d : Java client (UDP), cont T o datagram v i data-to-send, length, IP addr, port G i datagram t i server DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); ñ c datagram t server clientSocket.receive(receivePacket); String... byte[1024]; byte[] sendData = new byte[1024]; while(true) { T o vùng ñ m nh n datagram Nh n datagram DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); 17 Ví d : Java server (UDP), cont String sentence = new String(receivePacket.getData()); L y IP addr port # c a ngư i g i InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort();... sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); T o datagram ñ g i t i client DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); Ghi datagram ra socket serverSocket.send(sendPacket); } } } K t thúc vòng while, ch datagram khác 18 . 1 Lập trình socket Socket API ❒ ðưa ra trong BSD4 .1 UNIX, 19 81 ❒ Cho phép ứng dụng tạo ra và sử dụng socket ❒ Nguyên lý client/server ❒ Có hai dạng socket Truyền gói tin,. bới Lập trình viên ðiều khiển bởi Hệ ñiều hành Máy trạm, máy chủ 3 Lập trình socket với TCP Client phải gửi yêu cầu tới server ❒ Tiến trình máy chủ phải ñang ñược thực hiện ❒ máy chủ phải mở socket. tới: welcomeSocket = ServerSocket() tạo socket, kết nối tới hostid, port=x clientSocket = Socket( ) ñóng socket connectionSocket ñọc trả lời tại clientSocket ñóng clientSocket Server (máy hostid) Client gửi