[VC++] Lập Trình Mạng Với Thư Viện Winsock.pdf (JavaScript)

Trang chủ Trang chủ Tìm kiếm Trang chủ Tìm kiếm [VC++] Lập Trình Mạng Với Thư Viện Winsock pdf Số trang [VC++] Lập Trình Mạng Với Thư Viện Winsock 37 Cỡ tệp [VC++] Lập Trình Mạng Với Thư Viện Winsock 686 KB Lượt tải [VC++] Lập Trình Mạng Với Thư Viện Winsock 2 Lượt đọc [VC++] Lập Trình Mạng Với Thư Viện Winsock 20 Đánh giá [VC++] Lập Trình Mạng Với Thư Viện Winsock 4.3 ( 6 lượt) Xem tài liệu Nhấn vào bên dưới để tải tài liệu Tải về Chuẩn bị Đang chuẩn bị: 60 Bắt đầu tải xuống Đang xem trước 10 trên tổng 37 trang, để tải xuống xem đầy đủ hãy nhấn vào bên trên Chủ đề liên quan JavaScript ASP.NET khởi động Winsock Lập trình mạng thư viện Winsock cài đặt Winsock Hướng dẫn Lập trình mạng

Nội dung

[VC++] Lập Trình Mạng Với Thư Viện Winsock I. KHỞI ĐỘNG WINSOCK Để lập trình được Winsock chúng ta sẽ khai báo thư viện winsock2.h (chứa các prototypes) và 1 file lib (chính là file .cpp đã được biên dịch thành .lib) có tên là ws2_2.lib. Bây giờ hãy tạo 1 project Windows32 Console Project. Lưu ý: Chúng ta không khai báo trong file .cpp có hàm main mà khai báo trong file stdafx.h. Đây là cách khai báo thư viện của Visual C++. #include ... #include #pragma comment (lib,"ws2_32.lib") Và bây giờ sẽ là những hàm để khởi tạo Winsock: int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); Trong đó: - wVersionRequested là phiên bản thư viện mà mình sử dụng. Ở đây sẽ là giá trị 0x0202 có nghĩa là phiên bản 2.2. Chúng ta có thể dùng macro MAKEWORD(2,2) để trả về giá trị 0x0202. - lpWSData là một số thông tin bổ sung sẽ được trả về sau khi gọi khởi tạo Winsock.: typedef struct WSAData { WORD wVersion; // Phiên bản hiện tại WORD wHighVersion; // Phiên bản có thể hỗ trợ char szDescription[WSADESCRIPTION_LEN + 1]; // Ghi chú char szSystemStatus[WSASYS_STATUS_LEN + 1]; // Trạng thái hệ thống unsigned short iMaxSockets; // Không sử dụng từ Version 2 trở đi unsigned short iMaxUdpDg; // Không sử dụng từ Version 2 trở đi char FAR * lpVendorInfo; // Không sử dụng từ Version 2 trở đi } WSADATA, FAR * LPWSADATA; Và cuối cùng là hàm hủy Winsock khi kết thúc chương trình. nt WSACleanup (void); Chương trình đầu tiên: #include "stdafx.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { WSADATA SData; int iResult = WSAStartup(0x0202,&SData); if (iResult!=0){ cout dùng địa chỉ IP để truyền dữ liệu) - AF_NETBIOS: NetBIOS (Giao thức dùng tên máy để truyền dữ liệu) - AF_APPLETALK: AppleTalk - AF_ATM: ATM … Và ở trong Tut này mình chỉ nghiên cứu tới TCP/IP. * type: Quy định giao thức vận chuyển dữ liệu Ví dụ với giao thức TCP/IP thì có 2 giao thức cốt lõi là UDP và TCP: - SOCK_DGRAM: Hay là giao thức UDP. Khi chương trình chúng ta dùng UDP để truyền dữ liệu thì chuyện gì sẽ xảy ra giữa bên gởi và bên nhận? Bên gửi cứ gửi và gửi và nó không hề quan tâm tới vấn đề bên nhận có nhận được nó hay không? => Ưu điểm: Tốc độ truyền dữ liệu nhanh. => Nhược điểm: Khả năng sai, mất dữ liệu sẽ rất lớn. Vậy dùng UDP khi nào? Những ứng dụng cần dữ liệu tức thời như: - Chương trình nghe nhạc trực tuyến. Vấn đề sai bit (vấp khi nghe nhạc) không quan trọng mấy vì yêu cầu của nó là đảm bảo tốc độ nhanh. - Chương trình Chat chẳn hạn. - Hoặc GameOnline (thỉnh thoảng bạn bị trường hợp LAG chính là do bị mất dữ liệu trên đường truyền đó) - SOCK_STREAM: Đây là giao thức TCP. Nó ngược với UDP vì nó đảm bảo giữa bên gửi và bên nhận dữ liệu phải chính xác. Vì vậy 2 bên sẽ phải bắt tay rất nhiều lần khi truyền được dữ liệu (ví dụ như bên gửi sẽ gửi n gói tin (packet), bên nhận sẽ kiểm tra có bị mất hay sai gói tin nào hay không, nếu đủ thì nó sẽ yêu cầu bên gửi gửi tiếp n gói tin tiếp theo, ngược lại thì nó sẽ yêu cầu gửi lại) => Ưu điểm: Chất lượng gởi tin cậy. => Nhược điểm: Chậm hơn UDP. Những ứng dụng như WEB, MAIL, FTP,… - SOCK_RAW: Là giao thức để kiểm soát mạng, kiểm tra kết nối… Ví dụ: Start -> Run -> CMD: “ping diendantinhoc.com”. Nếu bạn nhận được Reply có nghĩa là giữa máy tính của bạn với máy chủ “diendantinhoc.com” có “thông mạng” với nhau. Và gói tin mà bạn PING chính là SOCK_RAW (ICMP Packet) * protocol: Chỉ định rõ lại giao thức mà thôi. Vì SOCK_RAW có 2 protocol là ICMP và RAW nên nó cần điều này - SOCK_DGREAM -> protocol là: IPPROTO_UDP - SOCK_STREAM -> protocol là: IPPROTO_IP - SOCK_RAW -> protocol có thể là: IPPROTO_RAW hay IPPROTO_ICMP Các bạn có thể tham khảo thêm bảng thể hiện các thuộc tính của hàm SOCKET: 3. Một số hàm lấy thông tin về mạng a. Lấy thông tin Socket int WSAEnumProtocols ( LPINT lpiProtocols, LPWSAPROTOCOL_INFO lpProtocolBuffer, LPDWORD lpdwBufferLength ); lpiProtocols: NULL lpProtocolBuffer: Kiểu dữ liệu trả về lpdwBufferLength: Kích thước của kiểu dữ liệu Tuy nhiên việc sử dụng hàm này còn hơi rườm rà. Ví dụ: WSAEnumProtocols(NULL,NULL,&size); // -> Lấy kích thước kiểu dữ liệu WSAPROTOCOL_INFO *lpProtocolBuffer; lpProtocolBuffer = (WSAPROTOCOL_INFO*) malloc(size); WSAEnumProtocols(NULL, lpProtocolBuffer,&size); b. Lấy tên máy tính của mình int gethostname(char* name, int namelen); Ví dụ: char lpMyPCName[10]; gethostbyname(lpMyPCName,10) cout

Từ khóa » Thư Viện Ws2tcpip.h