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

pdf 23 trang hoanguyen 3020
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Mạng máy tính - Chương 5: Lập trình Socket - Nguyễn Hồng Sơn", để 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_mang_may_tinh_chuong_5_lap_trinh_socket_nguyen_hon.pdf

Nội dung text: Bài giảng Mạng máy tính - Chương 5: Lập trình Socket - Nguyễn Hồng Sơn

  1. Ch ươ ng 5 Lập trình socket
  2. NI DUNG •Tng quan •Lp trình Socket v i TCP •Lp trình Socket v i UDP
  3. Tng quan application transport network data link Vi t ch ươ ng trình physical – Ch y trên các h th ng đ u cu i – Truy n thông qua m ng – Ví d web server giao ti p vi browser Vi t ch ươ ng trình trên các application transport network thi t b mng ngoài ph m data link application physical transport vi này network data link physical
  4. Lp trình socket Mc tiêu: bi t cách xây d ng m t ng d ng client/server giao ti p b ng socket Socket API socket •Đưc gi i thi u trong BSD4.1 Mt giao ti p cc b UNIX, 1981 trên host, ưc t o ư •Đ c kh i t o, s d ng và h y bi ng d ng và ưc mt cách t ưng minh b i ng dng đi u khi n b i h • Mô hình client/server đi u hành, qua đó quá • Hai lo i d ch v truy n t i qua trình ng d ng có th socket API: truy n (hay nh n) đ n – Datagram không b o đ m (hay t ) quá trình – connection-oriented b o khác đm
  5. Giao ti p gi a các quá trình trên hai host khác nhau • process truy n/nh n host hay host hay server server thông đi p đ n/t socket ca nó Ki m soát b i ng ưi l p trình • socket tươ ng t ư c a process process ra vào socket socket – Quá trình truy n thông TCP v i TCP v i đi p ra c a Buffer và Internet Buffer và các bi n các bi n – Quá trình truy n d a vào h tng truy n t i trên phía kia c a cánh c a, Ki m soát b i đi thông tin đ ưc chuy n đ n h u hành socket c a quá trình thu • API: (1) ch n giao th c truy n t i ; (2) kh năng s a m t vài thông s
  6. NI DUNG •Tng quan •Lp trình Socket v i TCP •Lp trình Socket v i UDP
  7. Lp trình socket v i TCP Socket: Nh ư là ca thông gi a các quá trình ng dng và giao th c truy n t i end-to-end (UCP hay TCP) TCP service: truy n t i b o đ m cho các byte t mt process đn m t process khác ư Đưc ki m soát b i Đ c ki m soát b i process ư ng ưi l p trình process ng i l p trình ng d ng ng d ng socket socket TCP vi TCP v i ư Đưc ki m soát b i Đ c ki m soát b i Buffer và Buffer và h đi u hành h đi u hành các bi n internet các bi n host hay host hay server server
  8. Lp trình socket v i TCP Client ph i liên l c v i server • Khi đ ưc liên h bi client, • Tr ưc h t quá trình trên server TCP to socket m i server ph i ch y đ quá trình server giao ti p • server ph i t o socket đ vi client đón ti p client – Cho phép server giao ti p vi nhi u quá trình client Client liên l c server bng: – Các ch s ưc dùng •To TCP socket đ phân bi t các client • Ch ra IP address, port number ca quá trình trên server T góc đ ng d ng • Khi client to socket : client TCP cung c ấp d ịch v ụ truy ền t ải có TCP thi t l p k t n i đ n tr ật t ự và bảo đ ảm gi ữa client và server TCP server
  9. Tư ng tác gi a client socket và server socket qua TCP Server Client To socket, port= x, ón yêu c u: welcomeSocket = ServerSocket() TCP i yêu c u To socket, hostid x kt n i n Thi t l p k t n i connect to , port= connectionSocket = clientSocket = welcomeSocket.accept() Socket() Gi yêu c u dùng c yêu c u t clientSocket connectionSocket Ghi ph n h i ra connectionSocket c ph n h i t clientSocket close connectionSocket close clientSocket
  10. Thu t ng Stream keyboard monitor • Stream là mt tu n t các ký t ào hay i ra input mt quá trình. stream Client inFromUser •Mt input stream ưc Process process kt v i m t ngu n nh p ca quá trình, ví d bàn phím hay socket. output input •Mt output stream ưc stream stream outToServer kt v i m t ích n c a inFromServer quá trình, ví d màn hình clientclientSocket TCP socket TCP hay socket. socket to network from network
  11. Ví d ng d ng client-server 1) client c dòng ký t t u vào chu n (inFromUser stream ), ri 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)
  12. 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 input stream BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); To client socket, Socket clientSocket = new Socket("hostname", 6789); kt n i đ n server To DataOutputStream outToServer = output stream new DataOutputStream(clientSocket.getOutputStream()); gn vào socket
  13. Ví d: Java client (TCP) (ti p theo). To BufferedReader inFromServer = input stream new BufferedReader(new gn vào socket InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); Gi dòng ký t đ n server outToServer.writeBytes(sentence + '\n'); Đc dòng ký modifiedSentence = inFromServer.readLine(); t t server System.out.println ("FROM SERVER: " + modifiedSentence ); clientSocket.close(); } }
  14. Ví d: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { public static void main(String argv[]) throws Exception { String clientSentence; To String capitalizedSentence; welcoming socket ServerSocket welcomeSocket = new ServerSocket(6789); Ti port 6789 while(true) { Đ i client liên h Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = To input stream, new BufferedReader(new gn vàosocket InputStreamReader(connectionSocket.getInputStream()));
  15. Ví d: Java server (TCP) (ti p theo) To output stream, gn 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 outToClient.writeBytes(capitalizedSentence); ký t ra socket } } } Kt thúc vòng l p while, tr li ch kt n i khác t client
  16. NI DUNG •Tng quan •Lp trình Socket v i TCP •Lp trình Socket v i UDP
  17. Lp trình socket vi UDP UDP: không có kt n i gi a client và server • Không b t tay T góc đ ng d ng • sender gn đ a ch IP và port c a đích vào m i UDP cung c ấp d ịch v ụ truy ền t ải không b ảo đ ảm gói gi ữa client và server • server ph i tách đ a ch IP và port c a client t gói nh n đ ưc UDP: data có th không đúng th t máy thu hay m t
  18. Tư ng tác gi a client socket và server socket qua UDP Server Client To socket, To socket, port= x. clientSocket = serverSocket = DatagramSocket() DatagramSocket() To datagram vi server IP và port=x; gi datagram qua c datagram t clientSocket serverSocket Ghi ph n h i ra serverSocket ch ra c datagram t client address, clientSocket port number close clientSocket
  19. Ví d: Java client (UDP) keyboard monitor input stream inFromUser ProcessClient process Input: nh n packet Output: truy n packet (TCP gi dòng byte) UDP UDP packet packet sendPacket receivePacket clientclientSocket UDP socket UDP socket to network from network
  20. 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(); Thông d ch hostname sang IP InetAddress IPAddress = InetAddress.getByName("hostname"); address dùng DNS byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes();
  21. Ví d: Java client (UDP) (ti p theo) To datagram vi data, DatagramPacket sendPacket = length, IP addr, port new DatagramPacket(sendData, sendData.length, IPAddress, 9876); Gi datagram clientSocket.send(sendPacket); đn 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(); } }
  22. Vi 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 port 9876 byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { To ch cho datagram nh n DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); Nh n serverSocket.receive(receivePacket); datagram
  23. Ví d: Java server (UDP) (ti p theo) String sentence = new String(receivePacket.getData()); Ly IP addr InetAddress IPAddress = receivePacket.getAddress(); port #, ca sender int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); To datagram đ DatagramPacket sendPacket = g i cho client new DatagramPacket(sendData, sendData.length, IPAddress, port); ghi datagram serverSocket.send(sendPacket); Ra socket } } } Kt thúc vòng l p while, tr li ch datagram khác