mạng máy tính ngô hồng sơn chương 7 1lập trình socket java sinhvienzone com

18 45 0
mạng máy tính ngô hồng sơn chương 7 1lập trình socket java sinhvienzone com

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình socket Mục đích: làm để xây dựng ứng dụng client/server truyền liệu qua socket Socket API socket ❒ ðưa BSD4.1 UNIX, 1981 ❒ Cho phép ứng dụng tạo 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) ứng dụng tạo máy trạm, quản lý bới OS qua ứng dụng gửi nhận thơng điệp đến/từ ứng dụng khác SinhVienZone.com https://fb.com/sinhvienzonevn Lập trình socket vớiTCP Socket: cửa giao tiếp tiến trình giao thức giao vận (UCP TCP) Dịch vụ TCP: truyền bytes tin cậy từ tiến trình đến tiến trình khác ðiều khiển bới Lập trình viên ðiều khiển Hệ điều hành Tiến trình Tiến trình socket TCP với Bộ ñệm, Các biến socket TCP với Bộ ñệm, Các biến Máy trạm, máy chủ internet ðiều khiển bới Lập trình viên ðiều khiển Hệ điều hành Máy trạm, máy chủ SinhVienZone.com https://fb.com/sinhvienzonevn Lập trình socket với TCP Client phải gửi yêu cầu tới server ❒ ñược client liên lạc, server TCP tạo socket để tiến ❒ Tiến trình máy chủ phải trình máy chủ giao tiếp với thực client ❒ máy chủ phải mở socket cho phép nói chuyện với (cổng) ñể nhận yêu cầu từ nhiều clients client phân biệt client số Client yêu cầu server cách: hiệu cổng (chương 3…) ❒ Tạo socket TCP máy ❒ Chỉ rõ IP address & port number tiến trình máy chủ ðối với ứng dụng ❒ Khi client tạo socket: client TCP cung cấp dịch vụ truyền dòng TCP tạo liên kết tới server bytes tin cậy có thứ tự TCP client server SinhVienZone.com https://fb.com/sinhvienzonevn Tương tác client/server qua socket TCP Server Client (máy hostid) tạo socket, port=x, cho yêu cầu tới: welcomeSocket = ServerSocket() chờ yêu cầu tới connectionSocket = welcomeSocket.accept() nhận yêu cầu từ connectionSocket trả lời connectionSocket ñóng socket connectionSocket Tạo liên kết TCP tạo socket, kết nối tới hostid, port=x clientSocket = Socket() gửi yêu cầu từ clientSocket đọc trả lời clientSocket đóng clientSocket SinhVienZone.com https://fb.com/sinhvienzonevn Stream keyboard monitor Client Process process output stream inFromServer input stream outToServer vào/ra tiến trình ❒ input stream gắn với nguồn vào, e.g bàn phím, socket ❒ output stream ñược gắn với nguồn ra, e.g., hình socket inFromUser ❒ stream chuỗi ký tự input stream client TCP clientSocket socket to network TCP socket from network SinhVienZone.com https://fb.com/sinhvienzonevn Lập trình socket với TCP Ví dụ ứng dụng client-server: 1) client đọc dòng văn người dùng gõ từ bàn phím (inFromUser stream) , gửi tới server qua socket (outToServer stream) 2) server đọc dòng gửi từ socket 3) server chuyển sang chữ hoa gửi trả lại cho client 4) client đọc in lại dòng văn nhận từ socket (inFromServer stream) SinhVienZone.com https://fb.com/sinhvienzonevn 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, nối tới server Tạo output stream nối tới socket BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); SinhVienZone.com https://fb.com/sinhvienzonevn Ví dụ: Java client (TCP), cont tạo input stream nối tới socket BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); Gửi tới server outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); ñọc tin từ server System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } SinhVienZone.com https://fb.com/sinhvienzonevn Ví dụ: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { Tạo socket chờ port 6789 public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { chờ yêu cầu từ client tạo input stream, nối tới socket Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); SinhVienZone.com https://fb.com/sinhvienzonevn Ví dụ: Java server (TCP), cont tạo output stream nối tới socket DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); đọc thơng tin từ socket clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; ghi socket outToClient.writeBytes(capitalizedSentence); } } } kết thúc while loop chờ yêu cầu từ client khác 10 SinhVienZone.com https://fb.com/sinhvienzonevn Chương 2: Tầng ứng dụng ❒ 2.1 Nguyên lý ❒ 2.6 Lập trình socket với ứng dụng mạng ❒ 2.2 Web 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 SinhVienZone.com https://fb.com/sinhvienzonevn Lập trình socket với UDP UDP: khơng có liên kết client ❒ khơng có giai đoạn bắt tay ❒ bên gửi rõ IP address port number phía nhận gói tin ❒ server tìm địa IP số hiệu cổng tương ứng bên gói tin ðối với ứng dụng UDP cung cấp dịch vụ truyền liệu không tin cậy client server UDP: gói tin bị ñến không theo thứ tự 12 SinhVienZone.com https://fb.com/sinhvienzonevn Tương tác client/server qua UDP socket Server (máy hostid) tạo socket, port=x, cho y/c ñến: serverSocket = DatagramSocket() Client tạo socket, clientSocket = DatagramSocket() tạo gói tin, đ/c (hostid, port=x, gửi gói tin từ clientSocket đọc y/c từ serverSocket ghi trả lời lên serverSocket rõ ñ/c, cổng client ñọc trả lời clientSocket đóng clientSocket 13 SinhVienZone.com https://fb.com/sinhvienzonevn 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 socket to network UDP socket from network 14 SinhVienZone.com https://fb.com/sinhvienzonevn Ví dụ: Java client (UDP) import java.io.*; import java.net.*; Tạo input stream class UDPClient { public static void main(String args[]) throws Exception { Tạo client socket chuyển ñổi hostname ->IP sử dụng DNS 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(); 15 SinhVienZone.com https://fb.com/sinhvienzonevn 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 modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } 16 SinhVienZone.com https://fb.com/sinhvienzonevn Ví dụ: Java server (UDP) import java.io.*; import java.net.*; Tạo datagram socket 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]; while(true) { Tạo vùng ñệm nhận datagram Nhận datagram DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); 17 SinhVienZone.com https://fb.com/sinhvienzonevn Ví dụ: Java server (UDP), cont String sentence = new String(receivePacket.getData()); Lấy IP addr port # người gửi InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); Tạo datagram ñể gửi tới client DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); Ghi datagram socket serverSocket.send(sendPacket); } } } Kết thúc vòng while, chờ datagram khác 18 SinhVienZone.com https://fb.com/sinhvienzonevn ... Tiến trình Tiến trình socket TCP với Bộ đệm, Các biến socket TCP với Bộ ñệm, Các biến Máy trạm, máy chủ internet ðiều khiển bới Lập trình viên ðiều khiển Hệ ñiều hành Máy trạm, máy chủ SinhVienZone. com. .. SinhVienZone. com https://fb .com/ sinhvienzonevn Lập trình socket với TCP Client phải gửi yêu cầu tới server ❒ ñược client liên lạc, server TCP tạo socket để tiến ❒ Tiến trình máy chủ phải trình máy chủ... modifiedSentence); clientSocket.close(); } } SinhVienZone. com https://fb .com/ sinhvienzonevn Ví dụ: Java server (TCP) import java. io.*; import java. net.*; class TCPServer { Tạo socket chờ port 678 9 public static

Ngày đăng: 28/01/2020, 22:48

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan