Bài giảng môn Lập trình mạng – Chương 1: Lập trình mạng dùng socket
lượt xem 5
download
Bài giảng môn Lập trình mạng – Chương 1: Lập trình mạng dùng socket. Những nội dung chính trong chương gồm có: Khái niệm về socket, thiết kế giải thuật client/server, lập trình mạng trên java, lập trình socket với udp, lập trình socket với tcp,... Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng môn Lập trình mạng – Chương 1: Lập trình mạng dùng socket
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG DÙNG SOCKET CHƯƠNG 1 Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 1 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM KHÁI NIỆM VỀ SOCKET z 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 Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM KHÁI NIỆM VỀ SOCKET Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 3 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER z Thiết kế giải thuật cho client – Giải thuật cho chương trình client dùng UDP z Xác định địa chỉ server. z Tạo socket. z Gởi/nhận dữ liệu theo giao thức lớp ứng dụng đã thiết kế. z Đóng socket. – Giải thuật cho chương trình client dùng TCP z Xác định địa chỉ server z Tạo socket. z Kết nối đến server. z Gởi/nhận dữ liệu theo giao thức lớp ứng dụng đã thiết kế. z Đóng kết nối. Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER z Thiết kế giải thuật cho Server – Chương trình server có hai loại: z Lặp(iterative) z Đồng thời (concurrent). – Hai dạng giao thức chương trình server: z Connection-oriented z Connectionless. Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 5 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 7 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 9 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM THIẾT KẾ GIẢI THUẬT CLIENT/SERVER Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 11 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z Gói java.net – InetAddress – ServerSocket – Socket – URL – URLConnection – DatagramSocket Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z 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: z public static InetAddess InetAddress.getByName(String hostname) z public static InetAddess [] InetAddress.getAllByName(String hostname) z public static InetAddess InetAddress.getLocalHost() – Để lấy địa chỉ IP hay tên dùng các phương thức: z getHostAddress() z getHostName() Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 13 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z 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"); } } } Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z 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"); } } } Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 15 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z Các chương trình đọc thêm – Tạo một địa chỉ IP từ mảng byte, chuỗi String. z InetAddressFactory.java – Cho một địa chỉ tìm tên máy. z ReverseTest.java Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 17 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z Socket class – Class mô tả về socket – Tạo một socket z Socket(InetAddress address, int port) z Socket(String host, int port) z Socket(InetAddress address, int port, InetAddress, localAddr, int localPort) z Socket(String host, int port, InetAddress, localAddr, int localPort) z Socket() Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z Socket class (tiếp theo) – Lấy thông tin về một socket z InetAddress getInetAddress() : trả về địa chỉ mà socket kết nối đến. z int getPort() : trả về địa chỉ mà socket kết nối đến. z InetAddress getLocalAddress() : trả về địa chỉ cục bộ. z int getLocalPort() : trả về địa chỉ cục bộ. – Sử dụng Streams z public OutputStream getOutputStream() throws IOException Trả về một output stream cho việc viết các byte đến socket này. z public InputStream getInputStream() throws IOException Trả về một input stream cho việc đọc các byte từ socket này. Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 19 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z 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()); Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z 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 Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 21 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z ServerSocket class – Class mô tả về ServerSocket – Tạo một ServerSocket z ServerSocket(int port) throws IOException z ServerSocket(int port, int backlog) throws IOException z ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 22 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z ServerSocket class – Các phương thức trong ServerSocket z Socket accept() throws IOException : Lắng nghe một kết nối đến socket này và chấp nhận nó. z void close() throws IOException : Đóng socket. z InetAddress getInetAddress() : trả về địa chỉ cục bộ của socket z int getLocalPort() : Trả về port mà server đang lắng nghe. z void setSoTimeout(int timeout) throws SocketException z Enable/disable SO_TIMEOUT với khai báo timeout (milliseconds) Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 23 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z 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); Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 24 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MẠNG TRÊN JAVA z 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); } } } Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 25 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH SOCKET VỚI UDP z 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. z Không cần thiết lập kết nối giữa client và server. z Sender phải gởi kèm địa chỉ IP và port đích z Server khi nhận dữ liệu sẽ phân tích địa chỉ của sender để truyền lại. z Có thể server chấp nhận nhiều client tại một thời điểm. Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 26 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH SOCKET VỚI UDP Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 27 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (UDP Client) Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 28 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (UDP Client) Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 29 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (UDP Server) Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 30 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (UDP Server) Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 31 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH SOCKET VỚI TCP z 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. z 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. z 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. Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 32 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH SOCKET VỚI TCP Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 33 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (TCP Client) Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 34 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (TCP Client tiếp theo) Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 35 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (TCP Server) Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 36 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM VÍ DỤ (TCP Server – tiếp theo) Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 37 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM BÀI TẬP z Viết chương trình trên Java/C tương tự như nslookup: – Cho 1 tên tìm ra địa chỉ IP. – Cho 1 địa chỉ IP tìm ra tên. – Giao diện tương tự như sau: Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 38 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM BÀI TẬP z Viết chương trình echo client trên Java. – echo : 7/tcp, 7/udp. z Viết chương trình finger client trên Java. – Finger: 79/tcp. z Viết chương trình echo server trên Java. Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 39 Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH SOCKET TRÊN UNIX Primitives Meaning SOCKET Create a new communication end point BIND Attach a local address to a socket LISTEN Announce willingness to accept connections; give queue size ACCEPT Block the caller until connection attempt arrives CONNECT Actively attempt to establish a connection SEND Send some data over the connection RECEIVE Receive some data from the connection CLOSE Release the connection Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 40 CuuDuongThanCong.com https://fb.com/tailieudientucntt
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng môn Lập trình mạng: Chương 1 - TS. Nguyễn Văn Hiệp
25 p | 107 | 18
-
Bài giảng môn Lập trình mạng: Chương 3 - TS. Nguyễn Văn Hiệp
55 p | 96 | 13
-
Bài giảng Lập trình mạng: Ôn tập thi hết môn Lập trình mạng - Phạm Trần Vũ
17 p | 121 | 11
-
Bài giảng môn Lập trình mạng: Chương 10 - TS. Nguyễn Văn Hiệp
57 p | 110 | 11
-
Bài giảng môn Lập trình mạng: Chương 7 - TS. Nguyễn Văn Hiệp
58 p | 92 | 11
-
Bài giảng môn Lập trình mạng: Chương 2 - TS. Nguyễn Văn Hiệp
50 p | 74 | 10
-
Bài giảng môn Lập trình mạng: Chương 5 - TS. Nguyễn Văn Hiệp
75 p | 75 | 9
-
Bài giảng môn Lập trình mạng: Chương 8 - TS. Nguyễn Văn Hiệp
60 p | 85 | 9
-
Bài giảng môn Lập trình mạng: Chương 9 - TS. Nguyễn Văn Hiệp
19 p | 76 | 8
-
Bài giảng môn Lập trình mạng: Chương 6 - TS. Nguyễn Văn Hiệp
21 p | 94 | 8
-
Bài giảng môn Lập trình mạng: Chương 4 - TS. Nguyễn Văn Hiệp
14 p | 79 | 8
-
Bài giảng môn Lập trình hướng đối tượng - Chương 5: Tập hợp trên Java
40 p | 85 | 7
-
Bài giảng môn Lập trình mạng – Chương 5b: Lập trình Web chạy ở server (tt)
22 p | 27 | 7
-
Bài giảng môn Lập trình mạng – Chương 4: DHMTL và lập trình Web chạy ở client
17 p | 36 | 6
-
Bài giảng môn Lập trình mạng – Chương 5a: Lập trình Web chạy ở server
42 p | 47 | 6
-
Bài giảng môn Lập trình mạng – Chương 0: Khái quát về mạng máy tính, TCP/IP
69 p | 47 | 5
-
Bài giảng môn Lập trình mạng – Chương 2&3: Lập trình MiniChat
10 p | 26 | 5
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn