1. Trang chủ
  2. » Công Nghệ Thông Tin

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

40 414 0

Đ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

Nội dung

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