Bài giảng Lập trình socket

pdf 18 trang phuongnguyen 2750
Bạn đang xem tài liệu "Bài giảng Lập trình socket", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_socket.pdf

Nội dung text: Bài giảng Lập trình socket

  1. Lp trình socket Mc đích: làm th nào đ xây dng các ng dng client/server truy n d li u qua socket Socket API socket ❒ ðư a ra trong BSD4.1 UNIX, 1981 ❒ Cho phép ng dng to ra và Là giao di n (ca) do ứng s dng socket dụng tạo ra trên máy tr ạm, qu ản lý bới OS qua ❒ Nguyên lý client/server đĩ các ng dng cĩ th gi ❒ Cĩ hai dng socket và nh n thơng đi p đn/t  Truy n gĩi tin, khơng tin các ng dng khác cy  Truy n dịng bytes, tin cy 1
  2. Lp trình socket viTCP Socket: ca giao ti p gi a các ti n trình và giao th c giao vn (UCP ho c TCP) Dch v TCP: truy n các bytes tin cy t mt ti n trình đn các ti n trình khác ði u khi n bi Ti n trình ði u khi n b i Ti n trình Lp trình viên L p trình viên socket socket TCP vi TCP vi ði u khi n bi ði u khi n b i B đm, H đi u hành B đ m, 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
  3. Lp trình socket vi TCP Client ph i gi yêu cu ti server ❒ khi đưc client liên lc, server ❒ Ti n trình máy ch ph i đang TCP to socket mi đ ti n đưc th c hi n trình máy ch giao ti p vi ❒ máy ch ph i m socket client (cng) đ nh n yêu cu t  cho phép nĩi chuy n vi client nhi u clients Client yêu cu server bng cách:  phân bi t client bng s hi u cng (ch ươ ng 3 ) ❒ To mt socket TCP trên máy ❒ Ch rõ IP address & port number ca ti n trình máy ch ði vi ng dng ❒ Khi client to socket : client TCP cung cấp dịch vụ truy ền dịng TCP to liên kt ti server bytes tin cậy và cĩ th ứ tự TCP gi ữa client và server 3
  4. Tươ ng tác gi a client/server qua socket TCP Server Client (máy hostid ) to socket, port= x, cho yêu cu ti: welcomeSocket = ServerSocket() To liên kt to socket, ch yêu cu ti TCP kt ni ti hostid , port= x connectionSocket = clientSocket = welcomeSocket.accept() Socket() gi yêu cu t nh n yêu cu t clientSocket connectionSocket tr li ti connectionSocket đc tr li ti clientSocket đĩng socket connectionSocket đĩng clientSocket 4
  5. Stream keyboard monitor ❒ stream mt chu i ký t vào/ra mt ti n trình. ❒ input input stream đưc gn vi stream mt ngu n vào, e.g. bàn Client inFromUser Process phím, socket process ❒ output stream đưc gn vi mt ngu n ra, e.g., màn hình socket. output input stream stream outToServer inFromServer clientclientSocket TCP socket TCP socket to network from network 5
  6. Lp trình socket vi TCP Ví d v ng dng client-server: 1) client đc các dịng văn bn do ng ưi dùng gõ t bàn phím (inFromUser stream) , gi ti server qua socket ( outToServer stream) 2) server đc các dịng gi t socket 3) server chuy n sang ch hoa và gi tr li cho client 4) client đc và in li dịng văn bn nh n đưc t socket ( inFromServer stream) 6
  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; To BufferedReader inFromUser = input stream new BufferedReader(new InputStreamReader(System.in)); To client socket, Socket clientSocket = new Socket("hostname", 6789); ni ti server To DataOutputStream outToServer = output stream new DataOutputStream(clientSocket.getOutputStream()); ni ti socket 7
  8. Ví d: Java client (TCP), cont. to BufferedReader inFromServer = input stream new BufferedReader(new ni ti socket InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); Gi ti server outToServer.writeBytes(sentence + '\n'); đc tin t modifiedSentence = inFromServer.readLine(); server System.out.println ("FROM SERVER: " + modifiedSentence ); clientSocket.close(); } } 8
  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; To socket ch ti port 6789 ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { ch yêu cu t client Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = to input stream, new BufferedReader(new ni ti socket InputStreamReader(connectionSocket.getInputStream())); 9
  10. Ví d: Java server (TCP), cont to output stream DataOutputStream outToClient = n i t i socket new DataOutputStream (connectionSocket.getOutputStream()); đc thơng tin clientSentence = inFromClient.readLine(); t socket capitalizedSentence = clientSentence.toUpperCase() + '\n'; ghi ra socket outToClient.writeBytes(capitalizedSentence); } } } kt thúc while loop và ch yêu cu t client khác 10
  11. Ch ươ ng 2: Tng ng dng ❒ 2.1 Nguyên lý ca các ❒ 2.6. Lp trình socket vi ng dng mng TCP ❒ 2.2 Web và HTTP ❒ 2.7. Lp trình socket vi ❒ 2.3 FTP – File Transfer UDP Protocol ❒ 2.4 Electronic Mail  SMTP, POP3, IMAP ❒ 2.5 DNS 11
  12. Lp trình socket vi UDP UDP: khơng cĩ liên kt gi a client và ❒ khơng cĩ giai đon bt tay ❒ bên gi ch rõ IP address và ði vi ng dng port number ca phía nh n ấ ị ụ ề ữ trên mi gĩi tin UDP cung c p d ch v truy n d li ệu khơng tin cậy gi ữa ❒ server s tìm đa ch IP và s client và server hi u cng tươ ng ng bên trong gĩi tin UDP: các gĩi tin cĩ th b mt ho c đn khơng theo th t 12
  13. Tươ ng tác client/server qua UDP socket Server (máy hostid ) Client to socket, to socket, port= x, cho các y/c đn: clientSocket = DatagramSocket() serverSocket = DatagramSocket() to gĩi tin, đ/c (hostid, port=x, gi gĩi tin t clientSocket đc y/c t serverSocket ghi tr li lên serverSocket đc tr li ti ch rõ đ/c, cng clientSocket ca client đĩng clientSocket 13
  14. Ví d: Java client (UDP) keyboard monitor input stream inFromUser ProcessClient process Input: đ c gĩi tin (nh c li: TCP gi Output: gi gĩi tin “byte stream ”) (nh c li: TCP gi “byte stream”) UDP UDP packet packet sendPacket receivePacket clientclientSocket UDP socket UDP socket to network from network 14
  15. Ví d: Java client (UDP) import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { To input stream BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); To client socket DatagramSocket clientSocket = new DatagramSocket(); chuy n đi InetAddress IPAddress = InetAddress.getByName("hostname"); hostname >IP s d ng DNS byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes(); 15
  16. Ví d: Java client (UDP), cont. To datagram vi datatosend, DatagramPacket sendPacket = length, IP addr, port new DatagramPacket(sendData, sendData.length, IPAddress, 9876); Gi datagram clientSocket.send(sendPacket); ti server DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); đc datagram clientSocket.receive(receivePacket); t server String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } 16
  17. Ví d: Java server (UDP) import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception To { datagram socket DatagramSocket serverSocket = new DatagramSocket(9876); ti cng 9876 byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { To vùng đm nh n datagram DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); Nh n serverSocket.receive(receivePacket); datagram 17
  18. Ví d: Java server (UDP), cont String sentence = new String(receivePacket.getData()); Ly IP addr InetAddress IPAddress = receivePacket.getAddress(); port # ca ng ưi gi int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); To datagram DatagramPacket sendPacket = đ g i t i client new DatagramPacket(sendData, sendData.length, IPAddress, port); Ghi datagram serverSocket.send(sendPacket); ra socket } } } Kt thúc vịng while, ch datagram khác 18