Bài giảng thí nghiệm Mạng máy tính 1 - Chương 6: Lập trình mạng dùng Socket

pdf 37 trang ngocly 330
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng thí nghiệm Mạng máy tính 1 - Chương 6: Lập trình mạng dùng 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_thi_nghiem_mang_may_tinh_1_chuong_6_lap_trinh_mang.pdf

Nội dung text: Bài giảng thí nghiệm Mạng máy tính 1 - Chương 6: Lập trình mạng dùng Socket

  1. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG DÙNG SOCKET CHƯƠNG VI Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 1
  2. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM KHÁI NIỆM VỀ SOCKET  Socket API – Ðược giới thiệu ở BSD4.1 UNIX, 1981 – Ðược ứng dụng khởi tạo, sử dụng và hủy bỏ. – Dùng cơ chế client/server – Cung cấp hai dịch vụ chuyển dữ liệu thông qua socket API: • unreliable datagram • reliable, byte stream-oriented Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 2
  3. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM KHÁI NIỆM VỀ SOCKET Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 3
  4. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  Thiết kế giải thuật cho client – Giải thuật cho chương trình client dùng UDP  Xác định địa chỉ server.  Tạo socket.  Gởi/nhận dữ liệu theo giao thức lớp ứng dụng đã thiết kế.  Đóng socket. – Giải thuật cho chương trình client dùng TCP  Xác định địa chỉ server  Tạo socket.  Kết nối đến server.  Gởi/nhận dữ liệu theo giao thức lớp ứng dụng đã thiết kế.  Đóng kết nối. Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 4
  5. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  Thiết kế giải thuật cho Server – Chương trình server có hai loại:  Lặp(iterative)  Đồng thời (concurrent). – Hai dạng giao thức chương trình server:  Connection-oriented  Connectionless. Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 5
  6. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 6
  7. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 7
  8. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 8
  9. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 9
  10. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 10
  11. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 11
  12. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  Gói java.net – InetAddress – ServerSocket – Socket – URL – URLConnection – DatagramSocket Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 12
  13. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  InetAddress class – Class mô tả về địa chỉ IP (Internet Protocol) – Các phương thức getLocalHost, getByName, hay getAllByName để tạo một InetAddress instance:  public static InetAddess InetAddress.getByName(String hostname)  public static InetAddess [] InetAddress.getAllByName(String hostname)  public static InetAddess InetAddress.getLocalHost() – Để lấy địa chỉ IP hay tên dùng các phương thức:  getHostAddress()  getHostName() Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 13
  14. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  In địa chỉ IP của localhost import java.net.*; public class HostInfo { public static void main(String args[]) { HostInfo host = new HostInfo(); host.init(); } public void init() { try { InetAddress myHost = InetAddress.getLocalHost(); System.out.println(myHost.getHostAddress()); System.out.println(myHost.getHostName()); } catch (UnknownHostException ex) { System.err.println("Cannot find local host"); } } } Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 14
  15. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  In địa chỉ IP của proxy.hcmut.edu.vn import java.net.*; class kku{ public static void main (String args[]) { try { InetAddress[] addresses = InetAddress.getAllByName(“proxy.hcmut.edu.vn"); for (int i = 0; i < addresses.length; i++) { System.out.println(addresses[i]); } } catch (UnknownHostException e) { System.out.println("Could not find proxy.hcmut.edu.vn"); } } } Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 15
  16. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  Các chương trình đọc thêm – Tạo một địa chỉ IP từ mảng byte, chuỗi String.  InetAddressFactory.java – Cho một địa chỉ tìm tên máy.  ReverseTest.java Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 16
  17. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 17
  18. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  Socket class – Class mô tả về socket – Tạo một socket  Socket(InetAddress address, int port)  Socket(String host, int port)  Socket(InetAddress address, int port, InetAddress, localAddr, int localPort)  Socket(String host, int port, InetAddress, localAddr, int localPort)  Socket() Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 18
  19. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  Socket class (tiếp theo) – Lấy thông tin về một socket  InetAddress getInetAddress() : trả về địa chỉ mà socket kết nối đến.  int getPort() : trả về địa chỉ mà socket kết nối đến.  InetAddress getLocalAddress() : trả về địa chỉ cục bộ.  int getLocalPort() : trả về địa chỉ cục bộ. – Sử dụng Streams  public OutputStream getOutputStream() throws IOException Trả về một output stream cho việc viết các byte đến socket này.  public InputStream getInputStream() throws IOException Trả về một input stream cho việc đọc các byte từ socket này. Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 19
  20. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  Kết nối đên 1 số webserver import java.net.*; import java.io.*; public class getSocketInfo { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { try { Socket theSocket = new Socket(args[i], 80); System.out.println("Connected to " + theSocket.getInetAddress() + " on port " + theSocket.getPort() + " from port " + theSocket.getLocalPort() + " of " + theSocket.getLocalAddress()); Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 20
  21. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  Kết nối đên 1 số webserver (tiếp theo) } catch (UnknownHostException e) { System.err.println("I can't find " + args[i]); } catch (SocketException e) { System.err.println("Could not connect to " + args[i]); } catch (IOException e) { System.err.println(e); } } // end for } // end main } // end getSocketInfo Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 21
  22. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  ServerSocket class – Class mô tả về ServerSocket – Tạo một ServerSocket  ServerSocket(int port) throws IOException  ServerSocket(int port, int backlog) throws IOException  ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 22
  23. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  ServerSocket class – Các phương thức trong ServerSocket  Socket accept() throws IOException : Lắng nghe một kết nối đến socket này và chấp nhận nó.  void close() throws IOException : Đóng socket.  InetAddress getInetAddress() : trả về địa chỉ cục bộ của socket  int getLocalPort() : Trả về port mà server đang lắng nghe.  void setSoTimeout(int timeout) throws SocketException  Enable/disable SO_TIMEOUT với khai báo timeout (milliseconds) Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 23
  24. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  DateTime Server import java.net.*; import java.io.*; import java.util.Date; public class DayTimeServer { public final static int daytimePort = 5000; public static void main(String[] args) { ServerSocket theServer; Socket theConnection; PrintStream p; try { theServer = new ServerSocket(daytimePort); Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 24
  25. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA  DateTime Server (tiếp theo) while (true) { theConnection = theServer.accept(); p = new PrintStream(theConnection.getOutputStream()); p.println(new Date()); theConnection.close(); theServer.close(); } }catch (IOException e) { System.err.println(e); } } } Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 25
  26. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH SOCKET VỚI UDP  Cung cấp cơ chế truyền không tin cậy giữa các nhóm các byte (datagrams) giữa client và server.  Không cần thiết lập kết nối giữa client và server.  Sender phải gởi kèm địa chỉ IP và port đích  Server khi nhận dữ liệu sẽ phân tích địa chỉ của sender để truyền lại.  Có thể server chấp nhận nhiều client tại một thời điểm. Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 26
  27. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH SOCKET VỚI UDP Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 27
  28. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (UDP Client) Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 28
  29. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (UDP Client) Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 29
  30. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (UDP Server) Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 30
  31. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (UDP Server) Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 31
  32. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH SOCKET VỚI TCP  Server – Server process phải chạy trước. – Server phải tạo một socket để lắng nghe và chấp nhận các kết nối từ client.  Client – Khởi tạo TCP socket. – Xác định IP address, port number của server. – Thiết lập kết nối đến server.  Khi server nhận yêu cầu kết nối, nó sẽ chấp nhận yêu cầu và khởi tạo socket mới để giao tiếp với client. – Có thể server chấp nhận nhiều client tại một thời điểm. Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 32
  33. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH SOCKET VỚI TCP Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 33
  34. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (TCP Client) Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 34
  35. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (TCP Client tiếp theo) Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 35
  36. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (TCP Server) Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 36
  37. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (TCP Server – tiếp theo) Bản quyền ®2005- Khoa Công Nghệ Thông Tin Trang 37