Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
216,14 KB
Nội dung
Chương Lập trình socket NỘI DUNG • Tổng quan • Lập trình Socket với TCP • Lập trình Socket với UDP Tổng quan Viết chương trình application transport network data link physical – Chạy hệ thống đầu cuối – Truyền thông qua mạng – Ví dụ web server giao tiếp với browser Viết chương trình thiết bị mạng phạm vi application transport network data link physical application transport network data link physical Lập trình socket Mục tiêu: biết cách xây dựng ứng dụng client/server giao tiếp socket Socket API • Được giới thiệu BSD4.1 UNIX, 1981 • Được khởi tạo, sử dụng hủy cách tường minh ứng dụng • Mô hình client/server • Hai loại dịch vụ truyền tải qua socket API: – Datagram không bảo đảm – connection-oriented bảo đảm socket Một giao tiếp cục host, tạo ứng dụng điều khiển hệ điều hành, qua trình ứng dụng truyền (hay nhận) đến (hay từ) trình khác Giao tiếp trình hai host khác • process truyền/nhận thông điệp đến/từ socket • socket tương tự cửa vào – Quá trình truyền thông điệp cửa – Quá trình truyền dựa vào hạ tầng truyền tải phía cánh cửa, thông tin chuyển đến socket trình thu host hay server host hay server Kiểm soát người lập trình process process socket socket TCP với Buffer biến Internet Kiểm soát hệ điều hành • API: (1) chọn giao thức truyền tải ; (2) khả sửa vài thông số TCP với Buffer biến NỘI DUNG • Tổng quan • Lập trình Socket với TCP • Lập trình Socket với UDP Lập trình socket với TCP Socket: Như cửa thông trình ứng dụng giao thức truyền tải end-to-end (UCP hay TCP) TCP service: truyền tải bảo đảm cho byte từ process đến process khác Được kiểm soát người lập trình ứng dụng Được kiểm soát hệ điều hành process process socket socket TCP với Buffer biến host hay server internet TCP với Buffer biến host hay server Được kiểm soát người lập trình ứng dụng Được kiểm soát hệ điều hành Lập trình socket với TCP Client phải liên lạc với server • Trước hết trình server phải chạy • server phải tạo socket để đón tiếp client Client liên lạc server bằng: • Tạo TCP socket • Chỉ IP address, port number trình server • Khi client tạo socket: client TCP thiết lập kết nối đến server TCP • Khi liên hệ client, server TCP tạo socket để trình server giao tiếp với client – Cho phép server giao tiếp với nhiều trình client – Các số port dùng để phân biệt client Từ góc độ ứng dụng TCP cung cấp dịch vụ truyền tải có trật tự bảo đảm client server Tương tác client socket server socket qua TCP Server Client Tạo socket, port=x, để đón yêu cầu: welcomeSocket = ServerSocket() Đợi yêu cầu Thiết kết nối đến connectionSocket = welcomeSocket.accept() Đọc yêu cầu từ connectionSocket Ghi phản hồi connectionSocket close connectionSocket TCP lập kết nối Tạo socket, connect to hostid, port=x clientSocket = Socket() Gửi yêu cầu dùng clientSocket Đọc phản hồi từ clientSocket close clientSocket Thuật ngữ Stream Client Process process output stream inFromServer input stream outToServer • Stream ký tự vào hay trình • Một input stream kết với nguồn nhập trình, ví dụ bàn phím hay socket • Một output stream kết với đích đến trình, ví dụ hình hay socket monitor inFromUser keyboard input stream client TCP clientSocket socket to network TCP socket from network Ví dụ ứng dụng client-server 1) client đọc dòng ký tự từ đầu vào chuẩn (inFromUser stream), gửi đến server qua socket (outToServer stream) 2) server đọc dòng ký tự từ socket 3) server đổi dòng ký tự thành chữ hoa, gửi ngược lại cho client 4) client đọc in dòng ký tự từ socket (inFromServer stream) 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; Tạo input stream Tạo client socket, kết nối đến server Tạo output stream gắn vào socket BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); Ví dụ: Java client (TCP) (tiếp theo) Tạo input stream gắn vào socket BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); Gửi dòng ký tự đến server outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); Đọc dòng ký tự từ server System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } Ví dụ: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { Tạo welcoming socket Tại port 6789 public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Đợi client liên hệ Tạo input stream, gắn vàosocket Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); Ví dụ: Java server (TCP) (tiếp theo) Tạo output stream, gắn vào socket DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); Đọc dòng ký tự từ socket clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; Ghi dòng ký tự socket outToClient.writeBytes(capitalizedSentence); } } } Kết thúc vòng lặp while, trở lại chờ kết nối khác từ client NỘI DUNG • Tổng quan • Lập trình Socket với TCP • Lập trình Socket với UDP Lập trình socket với UDP UDP: kết nối client server • Không bắt tay • sender gắn địa IP port đích vào gói • server phải tách địa IP port client từ gói nhận UDP: data không thứ tự máy thu hay Từ góc độ ứng dụng UDP cung cấp dịch vụ truyền tải không bảo đảm client server Tương tác client socket server socket qua UDP Server Tạo socket, port= x serverSocket = DatagramSocket() Đọc datagram từ serverSocket Ghi phản hồi serverSocket client address, port number Client Tạo socket, clientSocket = DatagramSocket() Tạo datagram với server IP port=x; gửi datagram qua clientSocket Đọc datagram từ clientSocket close clientSocket Ví dụ: Java client (UDP) input stream Client process monitor inFromUser keyboard Process Input: nhận packet UDP packet receivePacket packet (TCP gửi dòng byte) sendPacket Output: truyền UDP packet client UDP clientSocket socket to network UDP socket from network Ví dụ: Java client (UDP) import java.io.*; import java.net.*; Tạo input stream Tạo client socket Thông dịch hostname sang IP address 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 IPAddress = InetAddress.getByName("hostname"); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes(); Ví dụ: Java client (UDP) (tiếp theo) Tạo datagram với data, length, IP addr, port Gửi datagram đến 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 modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } Vi dụ: Java server (UDP) import java.io.*; import java.net.*; Tạo datagram socket port 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]; while(true) { Tạo chỗ cho datagram nhận Nhận datagram DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); Ví dụ: Java server (UDP) (tiếp theo) String sentence = new String(receivePacket.getData()); Lấy IP addr port #, sender InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); Tạo datagram để gửi cho client DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); ghi datagram Ra socket serverSocket.send(sendPacket); } } } Kết thúc vòng lặp while, trở lại chờ datagram khác [...]... server Tương tác giữa client socket và server socket qua UDP Server Tạo socket, port= x serverSocket = DatagramSocket() Đọc datagram từ serverSocket Ghi phản hồi ra serverSocket chỉ ra client address, port number Client Tạo socket, clientSocket = DatagramSocket() Tạo datagram với server IP và port=x; gửi datagram qua clientSocket Đọc datagram từ clientSocket close clientSocket Ví dụ: Java client (UDP)... DataOutputStream(connectionSocket.getOutputStream()); Đọc dòng ký tự từ socket clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; Ghi dòng ký tự ra socket outToClient.writeBytes(capitalizedSentence); } } } Kết thúc vòng lặp while, trở lại chờ kết nối khác từ client NỘI DUNG • Tổng quan • Lập trình Socket với TCP • Lập trình Socket với UDP Lập trình socket với UDP... String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Đợi client liên hệ Tạo input stream, gắn vàosocket Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); Ví dụ: Java server (TCP) (tiếp theo) Tạo output stream, gắn vào socket DataOutputStream outToClient... modifiedSentence; Tạo input stream Tạo client socket, kết nối đến server Tạo output stream gắn vào socket BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket( "hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); Ví dụ: Java client (TCP) (tiếp theo) Tạo input stream gắn vào socket BufferedReader inFromServer... clientSocket socket to network UDP socket from network Ví dụ: Java client (UDP) import java.io.*; import java.net.*; Tạo input stream Tạo client socket Thông dịch hostname sang IP address 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();... clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); Đọc datagram từ server clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } Vi dụ: Java server (UDP) import java.io.*; import java.net.*; Tạo datagram socket. .. UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { Tạo chỗ cho datagram nhận Nhận datagram DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); Ví dụ: Java server (UDP) (tiếp theo) String...Ví dụ ứng dụng client-server 1) client đọc dòng ký tự từ đầu vào chuẩn (inFromUser stream), rồi gửi đến server qua socket (outToServer stream) 2) server đọc dòng ký tự từ socket 3) server đổi các dòng ký tự thành chữ hoa, gửi ngược lại cho client 4) client đọc và in dòng ký tự từ socket (inFromServer stream) Ví dụ: Java client (TCP) import java.io.*; import java.net.*; class TCPClient { public static... InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); Gửi dòng ký tự đến server outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); Đọc dòng ký tự từ server System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } Ví dụ: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { Tạo welcoming socket Tại port... sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); Tạo datagram để gửi cho client DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); ghi datagram Ra socket serverSocket.send(sendPacket); } } } Kết thúc vòng lặp while, trở lại chờ datagram khác ... số TCP với Buffer biến NỘI DUNG • Tổng quan • Lập trình Socket với TCP • Lập trình Socket với UDP Lập trình socket với TCP Socket: Như cửa thông trình ứng dụng giao thức truyền tải end-to-end... while, trở lại chờ kết nối khác từ client NỘI DUNG • Tổng quan • Lập trình Socket với TCP • Lập trình Socket với UDP Lập trình socket với UDP UDP: kết nối client server • Không bắt tay • sender... connectionSocket close connectionSocket TCP lập kết nối Tạo socket, connect to hostid, port=x clientSocket = Socket( ) Gửi yêu cầu dùng clientSocket Đọc phản hồi từ clientSocket close clientSocket Thuật ngữ Stream