BÀI GIẢNG MÔN LẬP TRÌNH MẠNG

40 414 0
BÀI GIẢNG MÔN LẬP TRÌNH MẠNG

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 1: TỔNG QUAN VỀ LẬP TRÌNH MẠNG I. Họ giao thức TCP/IP 1. Mục tiêu _ Cung cấp dịch vụ truyền thông liên mạng, che dấu chi tiết kiến trúc liên mạng, che dấu chi tiết phần cứng. _ Kiến trúc phân lớp. 2. Địa chỉ IP a) Khái niệm _ Địa chỉ luận lý (địa chỉ cấp phát động hoặc tĩnh): xác định duy nhất một máy trên mạng, khác với địa chỉ card mạng. _ Địa chỉ vật lý (địa chỉ card mạng): do nhà sản xuất cấp phát. _ Phiên bản: • Ipv4: 32 bit, dạng biểu diễn số chấm thập phân (ví dụ: 192.168.10.1). • Ipv6: 128 bit. b) Phân lớp địa chỉ _ Xác định bởi những bit nhận dạng (Class ID): – Sự tương quan giữa lớp và kích thước mạng: _ Các địa chỉ IP đặc biệt: _ Các vùng địa chỉ IP dành riêng (Private Network): • 10.0.0.0 – 10.255.255.255.255 • 172.16.0.0 – 172.31.255.255 • 192.168.0.0 – 192.168.255.255 3. Một số giao thức a) Lớp Internet (Internet Layer) _ Giao thức Internet (IP – Internet Protocol). _ Giao thức Kiềm soát Thông điệp Internet (Internet Control Message Protocol – ICMP). _ Giao thức Nhóm Thông điệp Internet (Internet Group Message Protocol – IGMP). _ Giao thức Phân giải Địa chỉ (Address Resolution Protocol – ARP), giao thức Chuyển đổi Địa chỉ (Address Reverse Protocol – ARP): chuyển đổi địa chỉ vật lý, luận lý. b) Lớp Giao vận (Transport Layer) _ Cung cấp dịch vụ truyền thông giữa các tiến trình. _ Thông tin xác định tiến trình: • Địa chỉ IP. • Cổng (16 bit):  0 – 1023: well-know port, IANA (Internet Assigned Numbers Authority).  1024 – 49151: registered port.  49152 – 65535: dynamic port. _ Giao thức Kiểm soát Truyền thông (Transmission Control Protocol – TCP): • Có thiết lập cầu nối: full duplex. • Tin cậy: đúng trình tự, không thất thoát, không trùng lấp. • Byte stream: đệm dữ liệu (nơi lưu trữ dữ liệu trước khi gửi; ví dụ: nếu đệm là 1 KB, gói dữ liệu là 2 KB thì chỉ có 1KB được chuyển phải gửi lại thêm 1 KB nữa). _ Giao thức Dữ liệu Người dùng (User Datagram Protocol – UDP): • Không thiết lập cầu nối. • Không tin cậy. • Dạng truyền thông (broadcast). • Dữ liệu Người dùng (datagram). c) Lớp Ứng dụng (Application Layer) _ Cung cấp việc vận chuyển dữ liệu trong suốt giữa các hệ thống đầu cuối (end systems). II. Ứng dụng mạng _ Truyền tải tập tin (File Transfer). _ Trình duyệt web / server (Web Browser / Server). _ Thư điện tử (Electric Mail). _ Truyền tải giọng nói (Voice over IP). _ Xem phim, nghe nhạc trực tuyến (Audio / Video Online). _ Hội họp từ xa (Remote Conferencing). _ Trò chơi trực tuyến (Game Online). _ … III. Mô hình ứng dụng _ Mô hình 2 tầng (2-tiers): Client / Server. _ Mô hình đa tầng (N-tiers). _ Mô hình hàng ngang (Peer to Peer). IV. Giao diện lập trình socket 1. Window Socket API _ Khái quát: • Phát triển theo đặc tả giao diện Phân phối Phần mềm Berkeley (Berkeley Soft ware Distribution – BSD Socket). • Bổ sung các tính năng hoạt động của môi trường Windows. • Hiện thực ở dạng thư viện liên kết động: wsock32.dll (winsock.h), ws2_32.del (winsock.h). • Thư viện lập trình giao tiếp với giao thức mạng. _ Dữ liệu: socket, địa chỉ IP, thông tin máy. _ Các hàm: liên kết thư viện truy xuất thông tin, chuyển đổi dữ liệu, làm việc với socket. 2. Tiếp cận hướng đối tượng a) MFC _ Thư viện hỗ trợ của Microsoft: • Che giấu chi tiết sử dụng các hàm Winsock API. • Hỗ trợ xây dựng ứng dụng Internet. _ Windows Sockets: CasyncSocket, Csocket, CsocketFile. _ Mở rộng: Win32 Internet Extensions Winlnet: • ElnternetSession. • ElnternetConnection: CftpConnection, CgopherConection, ChttConnection. • CgopherLocation. • ElnternetFile. • EfileFmd. b) .NET _ System.Net: • DNS. • IPAddress. • EndPoint. • IPHostEntry. • Socket Address. • WebRequest, WebResponse. • WebClient. • … _ System.Net.Socket: • Socket. • SocketException. • TcpClient, TcpListener. • UdpClient. • … _ System.Net.Mail: • Enet. • … c) Java _ Java.Net: • InetAddress. • Socket, ServerSocket. • SocketException. • URI + , URL. _ Javamail. Chương 2: CĂN BẢN LẬP TRÌNH WINSOCK I. Socket 1. Khái niệm _ Cơ chế trừu tượng dùng cho quá trình truyền thông giữa các tiến trình. _ Tương ứng với cấu trúc chứa các thông tin cần cho quá trình truyền thông giữa các tiến trình (IP, port). 2. Quản lý socket _ Cấu trúc dữ liệu do hệ điều hành quản lý. _ Ứng dụng sử dụng thông qua handle. 3. Phân loại _ Stream Socket: TCP Socket. _ Datagram Socket: UDP Socket. _ Raw Socket. II. Phân nhóm hàm thư viện _ Liên kết thư viện, kết thúc. _ Truy xuất thông tin. _ Chuyển đổi dạng dữ liệu. _ Các hàm thao tác trên socket: • Tạo socket, đóng socket. • Thiết lập cầu nối. • Gửi, nhận dữ liệu. III. Liên kết thư viện _ Liên kết thư viện: int WSAStartup (WORD wVersionRequested, LPWSADATA lpwaData); _ Kết thúc: int WSACleanup(); _ Truy xuất mã lỗi sai: int WSAGetLastError(); _ Lưu ý: • File StdAfx.h: #include <afxsock.h> • Lớp ứng dụng: bool CDDemoApp :: InitInstance() { if (!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); return false; } return false; } IV. Truy xuất thông tin 1. Thông tin máy _ Các phương thức: • int gethost name (char FAR* name, int len); • PHOSTENT gethostbyname (const char FAR* hostname); • PHOSTENT gethostbyaddr (const char FAR* addr, int len, int af); _ Ví dụ: char sethostName [MAX_LEN]; if (gethostname (sethostName, MAX_LEN) != SOCKET_ERROR) { //… } else { //… } _ Cấu trúc thông tin máy: • struct hostent { char FAR* h_name; char FAR* FAR* h_aliases; short h_addtype; short h_lenght; char FAR* FAR* h_addr_list; #define h_addr h_addr_list[0]; }; • PHOSTENT pHostEnt = gethostbyname (set); if (pHostEnt != NULL) { //… } 2. Thông tin dịch vụ _ Cú pháp: PSERVENT getservbyname (constchar char FAR* name, const FAR* proto); V. Chuyển đổi thông tin dữ liệu 1. Chuyển đổi trật tự byte _ Trật tự byte: • Lưu trữ số nguyên trên máy tính: Host Byte Order Little-Endian Big-Endian short 12AB AB12 12AB long 12AB34CD CS34AB12 12AB34CD • Quy ước lưu trữ số nguyên trên mạng (Network Byte Order): Big-Endian. _ Các hàm chuyển đổi: • u_short ntohs (u_short); • u_long ntohl (u_long); • u_short htons (u_short); • u_long htonl (u_long); 2. Chuyển đổi dạng địa chỉ _ Dạng biểu diễn địa chỉ IPv4: • Số nguyên 4 byte. • Chuỗi dấu chấm thập phân (Dotted Decimal). _ Các hàm chuyển đổi: • unsigned long inet_addr (const char FAR* CD); • char FAR* inet_ntoa (struct in_addr in); _ Cấu trúc địa chỉ: struct in_addr { union { struct { u_char s_b1, s_b2, s_b3, s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; #define s_addr S_un.S_addr // can be used for most tcp & ip code #define s_host S_un.S_un_b.s_b2 // host on imp #define s_net S_un.S_un_b.s_b1 // network #define s_imp S_un.S_un_w.s_w2 // imp #define s_impno S_un.S_un_b.s_b4 // imp # #define s_lh S_un.S_un_b.s_b3 // logical host }; _ Ví dụ: //… PHOSTENT pHost = gethostbyname (“…”); if (pHost != NULL) { IN_ADDR inAddr; memcpy (&inAddr, pHost->h_addr, 4); // inAddr.s_addr = pHost->h_addr; Cstring sAddress = inet_ntoa (inAddr); //… } memcpy (&inAddr, pHost->h_addr, 4); VI. Các hàm socket 1. Quy trình sử dụng a) Có thiết lập cầu nối b) Không thiết lập cầu nối 2. Chi tiết sử dụng a) Tạo socket _ Cú pháp: SOCKET socket (int af, int type, int protocol); _ Thông số: • af: họ địa chỉ AF_INET. • type: loại địa chỉ – SOCK_STREAM (có thiết lập cầu nối – TCP), SOCK_DGRAM (không thiết lập cầu nối – UDP). • protocol: loại giao thức – 0. _ Kết quả trả về: • Thành công: handle của socket vừa tạo. • Thất bại: INVALID_SOCKET. _ Ví dụ: SOCKET s; // socket descriptor char lpszMessage[100]; // informational message s = socket(AF_INET, SOCK_STREAM, 0); if (s == INVALID_SOCKET) wsprintf (lpszMessage, “socket() generated error %d”, WSAGetLastError()); else lstrcpy(lpszMessage, “socket() succeeded”); MessageBox(NULL, lpszMessage, “Info”, MB_OK); b) Đóng socket _ Cú pháp: int closesocket(SOCKET s); _ Thông số: s: handle máy muốn đóng. _ Kết quả trả về: Thất bại: SOCKET_ERROR. c) Gán thông tin socket _ Cú pháp: int bind (SOCKET s, const struct sockaddr FAR* addr, int addrlen); _ Thông số: • s: handle của socket chờ gán thông tin. • addr: địa chỉ cấu trúc dùng để chứa thông tin socket phía kết nối đến. • addrlen: địa chỉ biến chứa kích thước cấu trúc bởi addr. _ Cấu trúc thông tin socket: struct sockaddr { u_short sa_family; // address family char sa_data[14]; // up to 14 bytes of direct address }; struct sockaddr_in { short sin_family; // address family u_short sin_port; // service port struct in_addr sin_addr; // Internet address char sin_zero[8]; // filler }; _ Ví dụ: SOCKET s; // socket descriptor char lpszMessage[100]; // informational message SOCKADDR_IN addr; // Internet address // create a stream socket s = socket(AF_INET, SOCK_STREAM, 0); if (s != INVALID_SOCKET) { // fill out the socket’s address information addr.sin_family = AF_INET; addr.sin_port = htons(1050); addr.sin_addr.s_addr = htonl(INADDR_ANY); // bind the socket to its address if (bind(s, (LPSOCKADDR)&addr, sizeof(addr)) == SOCKET_ERROR) { wsprintf(lpszMessage, “ bind() generated error %d”, WSAGetLastError()); MessageBox(NULL, lpszMessage, “Info”, MB_OK); } else { // } } • Trường hợp không chỉ định port: sin_port = 0; • Lấy thông tin socket: int getsockname (SOCKET s, struct sockAddr* addr, int* addrlen); d) Lắng nghe _ Cú pháp: int listen (SOCKET s, int backlog); _ Thông số: • s: handle máy muốn đóng. • backlog: kích thước hàng đợi kết nối. _ Kết quả trả về: Thất bại: SOCKET_ERROR. _ Ví dụ: SOCKET s; // socket descriptor char lpszMessage[100]; // informational message SOCKADDR_IN addr; // Internet address // create a stream socket s = socket(AF_INET, SOCK_STREAM, 0); if (s != INVALID_SOCKET) { // fill out the socket’s address information addr.sin_family = AF_INET; addr.sin_port = htons(1050); addr.sin_addr.s_addr = htonl(INADDR_ANY); // bind the socket to its address if (bind(s, (LPSOCKADDR)&addr, sizeof(addr)) != SOCKET_ERROR) { // listen for connections (queueing up to three) if (listen(s, 3) == SOCKET_ERROR) { wsprintf(lpszMessage, “listen() generated error %d”, WSAGetLastError()); MessageBox(lpszMessage, “Info”); } else { // } } } e) Tiếp nhận _ Cú pháp: SOCKET socket (SOCKET s, struct sockAddr FAR* addr, int FAR* addrlen); _ Thông số: • s: handle của socket chờ tiếp nhận “nói” (“lắng nghe”). • addr: địa chỉ cấu trúc dùng để chứa thông tin socket phía kết nối đến. • addrlen: địa chỉ biến chứa kích thước cấu trúc bởi addr. _ Kết quả trả về: • Thành công: handle của socket giao tiếp với phía kết nối đến • Thất bại: INVALID_SOCKET. _ Ví dụ: SOCKET s; // socket descriptor SOCKET clientS; // client socket descriptor char lpszMessage[100]; // informational message SOCKADDR_IN addr; // Internet address SOCKADDR_IN clientAddr; // Internet address IN_ADDR clientIn; // IP address int nClientAddrLen; // create a stream socket s = socket(AF_INET, SOCK_STREAM, 0); if (s != INVALID_SOCKET) { // fill out the socket’s address information addr.sin_family = AF_INET; addr.sin_port = htons(1050); addr.sin_addr.s_addr = htonl(INADDR_ANY); // bind the socket to its address if (bind(s, (LPSOCKADDR)&addr, sizeof(addr)) != SOCKET_ERROR) { // listen for connections (queueing up to three) if (listen(s, 3) != SOCKET_ERROR) { // set the size of the client address structure nClientAddrLen = sizeof(clientAddr); // accept a connection clientS = accept(s, (LPSOCKADDR)&clientAddr, &nClientAddrLen); if (clientS == INVALID_SOCKET) { wsprintf(lpszMessage, “ accept() generated error %d”, WSAGetLastError()); MessageBox(lpszMessage, “Info”); } else { // copy the four byte IP address into an IP address structure memcpy(&clientIn, &clientAddr.sin_addr.s_addr, 4); // print an informational message wsprintf(lpszMessage, “accept() ok: client IP address is %s, port is %d”, inet_ntoa(clientIn), ntohs(clientAddr.sin_port)); 114 Part II n Basics of WinSock Programming MessageBox(lpszMessage, “Info”); } } } } _ Trường hợp lấy thông tin phía kết nối sau khi tiếp nhận kết nối: int getpeername (SOCKET s, struct sockAddr* addr, int* addrlen); _ Ví dụ: // accept a connection clientS = accept(s, NULL, NULL); if (clientS == INVALID_SOCKET) { wsprintf(lpszMessage, “accept() generated error %d”, WSAGetLastError()); MessageBox(lpszMessage, “Info”); } else { if (getpeername(clientS, (LPSOCKADDR)&clientAddr, &nClientAddrLen)) == SOCKET_ERROR) { wsprintf(lpszMessage, “getpeername() generated error %d”, WSAGetLastError()); MessageBox(lpszMessage, “Info”); } else { // copy the four byte IP address into an IP address structure memcpy(&clientIn, &clientAddr.sin_addr.s_addr, 4); // print an informational message wsprintf(lpszMessage, “client IP address is %s, port is %d”, inet_ntoa(clientIn), ntohs(clientAddr.sin_port)); MessageBox(lpszMessage, “Info”); // } } f) Kết nối _ Cú pháp: int connect (SOCKET s, const struct sockAddr FAR* addr, int addrlen); _ Thông số: • s: handle của socket thực hiện kết nối. • addr: địa chỉ cấu trúc dùng để chứa thông tin socket phía chờ kết nối. • addrlen: địa chỉ biến chứa kích thước cấu trúc bởi addr. _ Kết quả trả về: Thất bại: SOCKET_ERROR. _ Ví dụ: bool ConnectToServer (const Cstring &sServerAddress, short nServerPort) { bool bSuccess = true; m_hSocket = socket (AP_INET, SOCK_STREAM, 0); if (m_hSocket == INVALID_SOCKET) bSuccess = false; else { SOCKADD_IN sockAddr; addrServer.sin_family = AF_INET; addrServer.sin_port = htons(nServerPort); addrServer.sin_addr.s_addr = inet_addr(sServerAddress); if (connect(s, (LPSOCKADDR) &addrServer, sizeof(addrServer)) == SOCKET_ERROR) { bSuccess = false; closesock(m_hSocket); [...]... LỤC 1 Bài 1 1 2 Bài 2 2 3 Bài 3: Trang Định dạng trang web 3 4 Bài 4: Trang Định dạng trang web (bài làm thêm) 4 5 Bài 5 4 6 Bài 6 5 7 Bài 7 6 8 Bài 8: Trang Tạo bảng 6 9 Bài 9: Trang Tạo bảng, trộn dòng và cột 7 10 Bài 10: Trang Tạo bảng, trộn dòng và cột (bài làm... dòng và cột (bài làm thêm) 8 11 Bài 11: Trang Tạo form và các điều khiển trên form 8 12 Bài 12 9 13 Bài 13 10 14 Bài 14: Trang Tạo frame 11 15 Bài 15: Trang Tạo iframe trong trang web .13 16 Bài 16: Trang Bài tổng hợp 13 17 Bài 17: Trang Ẩm thực Nam Bộ .16 18 Bài 18: Trang Bài viết về Mũi né 17 Chuyên... trang web Yêu cầu chức năng (phần mở rộng của bài học) Stt 1 Đối tượng Hình ảnh Yêu cầu xử lý chức năng − Khi rê chuột vào hình ảnh: Xuất hiện khung ”Hương vị miền Nam” (hình 2) − Khi rê chuột ra khỏi hình ảnh: Trở về trạng thái ban đầu (hình 1) 18 Bài 18: Trang Bài viết về Mũi né Hình 1: Khi mở trang Hình 2: Khi rê chuột vào hình thì xuất hiện tựa đề của bài viết Chuyên đề HTML và CSS 17/19 Baøi taäp... định là trang Bai 1.html 15 Bài 15: Trang Tạo iframe trong trang web Ý nghĩa Tạo trang web xem nội dung các bài tập về ngôn ngữ HTML Yêu cầu thiết kế: Stt Đối tượng Yêu cầu 1 Trang web − Tiêu đề cửa sổ: Tạo iframe 2 Nội dung trang web − Tạo 1 table chứa nội dung trên, trong đó: + Ô đầu: Chứa nội dung tiêu đề + Ô bên trái: Chứa thực đơn bài tập, mỗi dòng liên kết đến trang web bài tập tương ứng + Ô bên... lý: Stt 1 Đối tượng Thực đơn bài tập Yêu cầu − Khi chọn: Thể hiện nội dung trang web tương ứng trong ô bên phải 16 Bài 16: Trang Bài tổng hợp Chuyên đề HTML và CSS 13/19 Baøi taäp Chuyên đề HTML và CSS 14/19 Baøi taäp Ý nghĩa: Tạo trang web có nội dung là các chuyên mục thắc mắc “Ai? Cái gi? Ở đâu?” Yêu cầu thiết kế: Stt Đối tượng Yêu cầu 1 Trang web − Tiêu đề cửa sổ: Bài tập tổng hợp 2 Nội dung trang... của bài học) Stt 1 Đối tượng Hình ảnh Yêu cầu xử lý chức năng − Khi rê chuột vào hình ảnh: Xuất hiện tựa đề ”Mũi Né – Huyền bí và quyến rũ” (hình 2) Thay đổi biểu tượng chuột − Khi rê chuột ra khỏi hình ảnh: Mất đi tựa đề − Khi nhấn chuột vào hình thì xuất hiện nội dung bài viết phía bên phải của hình (hình 3) 2 Trang web Chuyên đề HTML và CSS − Khi nhấn chuột vào trang web thì mất đi nội dung bài. .. cầu thiết kế: Stt 1 Đối tượng Nội dung trang web Yêu cầu Hằng số màu − Trang web: Nền màu xanh da trời #DEF0FA − Tạo một danh sách là tiêu đề các bài tập, mỗi dòng liên kết đến trang web bài tập tương ứng Tạo trang chủ: Ý nghĩa: Tạo trang web xem nội dung các bài tập về ngôn ngữ HTML Yêu cầu thiết kế: Stt 1 Đối tượng Trang web Chuyên đề HTML và CSS Yêu cầu − Tiêu đề cửa sổ: Tạo frame 12/19 Baøi taäp 2... 17/19 Baøi taäp Hình 3: Khi click chuột vào hình thì xuất hiện nội dung bài viết Ý nghĩa: Tạo trang web có nội dung là bài viết về Mũi Né, có hiệu ứng hình ảnh, văn bản và chuột Yêu cầu thiết kế: Stt Đối tượng Yêu cầu 1 Trang web − Tiêu đề cửa sổ: Sử dụng CSS 2 Nội dung trang web Tên lớp CSS − Sử dụng CSS để: Tạo lớp định dạng nội dung bài viết cho tag (hình 3) baiviet Thay đổi biểu tượng chuột khi... chuyển đến mục tương ứng trong ô bên phải 2 Về đầu trang − Khi chọn, di chuyển về đầu trang web Chuyên đề HTML và CSS Yêu cầu 15/19 Baøi taäp 17 Bài 17: Trang Ẩm thực Nam Bộ Hình 1: Khi mở trang Hình 2: Khi rê chuột vào hình ảnh Ý nghĩa Tạo trang web có nội dung là bài viết về Ẩm thực Nam bộ, có hiệu ứng văn bản và đường viền Yêu cầu thiết kế: Stt Đối tượng Yêu cầu 1 Trang web − Tiêu đề cửa sổ: Sử dụng...Baøi taäp Tạo trang web cho phép người dùng điền thông tin vào Phiếu đăng ký tham gia trương trình khuyến mãi Yêu cầu thiết kế: Stt Đối tượng Yêu cầu 1 Trang web − Tiêu đề cửa sổ: Tạo form và các điều khiển 2 Nội dung trang web − Tạo form − Tạo table trong form − Tạo các điểu khiển Text Fields, . trên socket chỉ trả về khi tác vụ hoàn tất → Tiến trình bị chặn nếu tác vụ chưa hoàn tất (sự kiện mong đợi chưa xảy ra). b) Non-blocking _ Các hàm thực hiện hoạt động nhập / xuất trên socket trở. luồng (multithread). b) WSAAsyncSelect _ Mô hình xử lý bất đồng bộ: • Ứng dụng đăng ký sự kiện mong đợi xảy ra trên socket. • Hệ thống giám sát và gửi thông điệp báo hiệu đến ứng dụng khi sự. đồng bộ: int WSAAsyncSelect (SOCKET s, HWND hWnd, UINT message, long IEvent), trong đó sự kiện mong đợi (IEvent) bao gồm: • FD_ACCEPT, FD_CONNECT. • FD_READ, FD_WRITE. • FD_CLOSE. • FD_OOB.

Ngày đăng: 19/10/2014, 12:58

Từ khóa liên quan

Trích đoạn

Tài liệu cùng người dùng

Tài liệu liên quan