Page 1
Lập trình 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 Socket API socket r ðưa ra trong BSD4.1 UNIX, 1981 r Cho phép ứng dụng tạo ra và Là giao diện (cửa) do ứng sử dụng socket dụng tạo ra trên máy trạm, quản lý bới OS qua r Nguyên lý client/server ñó các ứng dụng có thể gửi r Có hai dạng socket và nhận thông ñiệp ñến/từ Truyền gói tin, không tin các ứng dụng khác cậy Truyền dòng bytes, tin cậy 1 goupee.com fb.com/groups/goupee
Page 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 ðiều khiển bới Tiến trình ðiều khiển bới Tiến trình Lập trình viên Lập trình viên socket socket TCP với TCP với ðiều khiển bởi ðiều khiển bởi Bộ ñệm, Bộ ñệm, Hệ ñiều hành internet Hệ ñiều hành Các biến Các biến Máy trạm, Máy trạm, máy chủ máy chủ 2 goupee.com fb.com/groups/goupee
Page 3
Lập trình socket với TCP Client phải gửi yêu cầu tới server r khi ñược client liên lạc, server r Tiến trình máy chủ phải ñang TCP tạo socket mới ñể tiến ñược thực hiện trình máy chủ giao tiếp với r máy chủ phải mở socket client (cổng) ñể nhận yêu cầu từ cho phép nói chuyện với client nhiều clients Client yêu cầu server bằng cách: phân biệt client bằng số hiệu cổng (chương 3…) 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ủ ðối với ứng dụng r 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 và có thứ tự TCP giữa client và server 3 goupee.com fb.com/groups/goupee
Page 4
Tương tác giữa client/server qua socket TCP Server Client (máy hostid) tạo socket, port=x, cho yêu cầu tới: welcomeSocket = ServerSocket() Tạo liên kết tạo socket, chờ yêu cầu tới TCP kết nối tới hostid, port=x connectionSocket = clientSocket = welcomeSocket.accept() Socket() gửi yêu cầu từ nhận yêu cầu từ clientSocket connectionSocket trả lời tại connectionSocket ñọc trả lời tại clientSocket ñóng socket connectionSocket ñóng clientSocket 4 goupee.com fb.com/groups/goupee
Page 5
Stream keyboard monitor 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 input stream một nguồn vào, e.g. bàn Client inFromUser phím, socket Process process r output stream ñược gắn với một nguồn ra, e.g., màn hình socket. output input stream stream outToServerinFromServer client TCP clientSocket socket TCP socket to network from network 5 goupee.com fb.com/groups/goupee
Page 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) 6 goupee.com fb.com/groups/goupee
Page 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; Tạo input stream BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Tạo client socket, Socket clientSocket = new Socket("hostname", 6789); nối tới server Tạo DataOutputStream outToServer = output stream new DataOutputStream(clientSocket.getOutputStream()); nối tới socket 7 goupee.com fb.com/groups/goupee
Page 8
Ví dụ: Java client (TCP), cont. tạo BufferedReader inFromServer = input stream new BufferedReader(new nối tới socket InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); Gửi tới server outToServer.writeBytes(sentence + '\n'); ñọc tin từ modifiedSentence = inFromServer.readLine(); server System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } 8 goupee.com fb.com/groups/goupee
Page 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; Tạo socket chờ tại port 6789 ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { chờ yêu cầu từ client Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = tạo input stream, new BufferedReader(new nối tới socket InputStreamReader(connectionSocket.getInputStream())); 9 goupee.com fb.com/groups/goupee
Page 10
Ví dụ: Java server (TCP), cont tạo output stream DataOutputStream outToClient = nối tới socket new DataOutputStream(connectionSocket.getOutputStream()); ñọc thông tin từ socket clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; ghi ra socket outToClient.writeBytes(capitalizedSentence); } } } kết thúc while loop và chờ yêu cầu từ client khác 10 goupee.com fb.com/groups/goupee
Page 11
Chương 2: Tầng ứng dụng r 2.1 Nguyên lý của các r 2.6. Lập trình socket với ứng dụng mạng TCP r 2.2 Web và HTTP r 2.7. Lập trình socket với r 2.3 FTP – File Transfer UDP Protocol r 2.4 Electronic Mail SMTP, POP3, IMAP r 2.5 DNS 11 goupee.com fb.com/groups/goupee
Page 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à ðối với ứng dụng port number của phía nhận trên mỗi gói tin UDP cung cấp dịch vụ truyền dữ liệu không tin cậy giữa r server sẽ tìm ñịa chỉ IP và số client và server 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ự 12 goupee.com fb.com/groups/goupee
Page 13
Tương tác client/server qua UDP socket Server (máy hostid) Client tạo socket, tạo socket, port=x, cho các y/c ñến: clientSocket = DatagramSocket() serverSocket = 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 ñọc trả lời tại chỉ rõ ñ/c, cổng clientSocket của client ñóng clientSocket 13 goupee.com fb.com/groups/goupee
Page 14
Ví dụ: Java client (UDP) keyboard monitor input stream ProcessClient inFromUser process Input: ñọc gói tin (nhắc lại: TCP gửi Output: gửi gói tin “byte stream”) (nhắc lại: TCP gửi “byte stream”) UDP UDP packet packet sendPacket receivePacket client UDP clientSocket socket UDP socket to network from network 14 goupee.com fb.com/groups/goupee
Page 15
Ví dụ: Java client (UDP) import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { Tạo input stream BufferedReader inFromUser = Tạo new BufferedReader(new InputStreamReader(System.in)); client socket DatagramSocket clientSocket = new DatagramSocket(); chuyển ñổi hostname ->IP InetAddress IPAddress = InetAddress.getByName("hostname"); sử dụng DNS byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes(); 15 goupee.com fb.com/groups/goupee
Page 16
Ví dụ: Java client (UDP), cont. Tạo datagram với data-to-send, DatagramPacket sendPacket = length, IP addr, port new DatagramPacket(sendData, sendData.length, IPAddress, 9876); Gửi datagram clientSocket.send(sendPacket); tới server 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 goupee.com fb.com/groups/goupee
Page 17
Ví dụ: Java server (UDP) import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception Tạo { datagram socket tại cổng 9876 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 DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); Nhận serverSocket.receive(receivePacket); datagram 17 goupee.com fb.com/groups/goupee
Page 18
Ví dụ: Java server (UDP), cont String sentence = new String(receivePacket.getData()); Lấy IP addr port # của người InetAddress IPAddress = receivePacket.getAddress(); gửi 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 serverSocket.send(sendPacket); ra socket } } } Kết thúc vòng while, chờ datagram khác 18 goupee.com fb.com/groups/goupee
Showing the first 18 pages. Download the document to see it all.
Comments (0)
No comments yet. Be the first!