Bài giảng Mạng máy tính - Chương 7.1: Lập trình Socket Java - Ngô Hồng Sơn

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 trên mỗi gói tin ❒ server sẽ tìm ñịa chỉ IP và số hiệu cổng tương ứng bên trong gói tin UDP: các gói tin có thể bị mất hoặc ñến không theo thứ tự

pdf18 trang | Chia sẻ: huongthu9 | Lượt xem: 487 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Bài giảng Mạng máy tính - Chương 7.1: Lập trình Socket Java - Ngô Hồng Sơn, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1Lập trình socket Socket API r ðưa ra trong BSD4.1 UNIX, 1981 r Cho phép ứng dụng tạo ra và sử dụng socket r Nguyên lý client/server r 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 2Lậ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ủ 3Lập trình socket với TCP Client phải gửi yêu cầu tới server r Tiến trình máy chủ phải ñang ñược thực hiện r 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: r Tạo một socket TCP trên máy r Chỉ rõ IP address & port number của tiến trình máy chủ r Khi client tạo socket: client TCP tạo liên kết tới server TCP r 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 4Tươ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ừ clientSocketnhận yêu cầu từ connectionSocket trả lời tại connectionSocket Tạo liên kết TCP 5o u t T o S e r v e r to network from network i n F r o m S e r v e r i n F r o m U s e r keyboard monitor Process clientSocket input stream input stream output stream TCP socket Client process client TCP socket Stream r stream một chuỗi ký tự vào/ra một tiến trình. r input stream ñược gắn với một nguồn vào, e.g. bàn phím, socket r output stream ñược gắn với một nguồn ra, e.g., màn hình socket. 6Lậ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) 7Ví 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 8Ví 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 9Ví 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 11 Chương 2: Tầng ứng dụng r 2.1 Nguyên lý của các ứng dụng mạng r 2.2 Web và HTTP r 2.3 FTP – File Transfer Protocol r 2.4 Electronic Mail  SMTP, POP3, IMAP r 2.5 DNS r 2.6. Lập trình socket với TCP r 2.7. Lập trình socket với UDP 12 Lập trình socket với UDP UDP: không có liên kết giữa client và r không có giai ñoạn bắt tay r bên gửi chỉ rõ IP address và port number của phía nhận trên mỗi gói tin r server sẽ tìm ñịa chỉ IP và số hiệu cổng tương ứng bên trong gói tin UDP: các gói tin có thể bị mất hoặc ñến không theo thứ tự ðố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 13 Tương tác client/server qua UDP socket ñóng clientSocket Server (máy hostid) ñọc trả lời tại clientSocket tạo socket, clientSocket = DatagramSocket() Client tạo gói tin, ñ/c (hostid, port=x, gửi gói tin từ clientSocket tạo socket, port=x, cho các y/c ñến: serverSocket = DatagramSocket() ñọc y/c từ serverSocket ghi trả lời lên serverSocket chỉ rõ ñ/c, cổng của client 14 Ví dụ: Java client (UDP) s e n d P a c k e t to network from network r e c e i v e P a c k e t i n F r o m U s e r keyboard monitor Process clientSocket UDP packet input stream UDP packet UDP socket Output: gửi gói tin (nhắc lại: TCP gửi “byte stream”) Input: ñọc gói tin (nhắc lại: TCP gửi “byte stream”) Client process client UDP socket 15 Ví dụ: Java client (UDP) import java.io.*; import java.net.*; 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(); Tạo input stream Tạo client socket chuyển ñổi hostname ->IP sử dụng DNS 16 Ví dụ: Java client (UDP), cont. DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } Tạo datagram với data-to-send, length, IP addr, port Gửi datagram tới server ñọc datagram từ server 17 Ví dụ: Java server (UDP) import java.io.*; import java.net.*; 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) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); Tạo datagram socket tại cổng 9876 Tạo vùng ñệm nhận datagram Nhận datagram 18 Ví dụ: Java server (UDP), cont String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } } } Lấy IP addr port # của người gửi Ghi datagram ra socket Kết thúc vòng while, chờ datagram khác Tạo datagram ñể gửi tới client

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_mang_may_tinh_chuong_7_1_lap_trinh_socket_java_ngo.pdf