1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lập trình mạng trong windows - Chương 2 potx

37 363 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

Thông tin cơ bản

Định dạng
Số trang 37
Dung lượng 223,6 KB

Nội dung

Chương 2: Lậptrìnhmạng trong windows Chương 2 1. Giớithiệuthư viện winsock -Giaotiếplậptrìnhmạng cho phép phát triển ứng dụng giao tiếp trên cùng một máy hoặc nhiều máy khác nhau thông qua môi trường mạng - Winsock đượchỗ trợ sẵn trong windows cho phép lậptrìnhmạng vớigiao thức TCP/IP hoặcIPX -Lập trình Winsock trong windows ta sử dụng thư viện WINSOCK2.H, WS2_32.LIB - Phiên bản winsock hỗ trợ cho các hệ điều hành Windows như sau: Chương 2 1. Giớithiệuthư viện winsock Khởi động Winsock -Trước khi chạy ứng dụng winsock cần khởi động thư viện winsock, winsock DLL bằng hàm WSAStartup int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); wVersionRequested : version của winsock lpWSAData : trỏ tới struct LPWSADATA Chương 2 1. Giớithiệuthư viện winsock Khởi động Winsock - typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN + 1]; char szSystemStatus[WSASYS_STATUS_LEN + 1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; } WSADATA, * LPWSADATA; Chương 2 1. Giớithiệuthư viện winsock Kết thúc Winsock Gọi hàm int WSACleanup(void); Chương 2 2. Tạo socket trong windows - Cú pháp SOCKET socket ( int af, int type, int protocol ); af: họđịachỉ giao thức, thiếtlậplàAF_INET nếuta sử dụng IPv4 type: kiểu giao thức của socket, thiết lập là SOCK_STREAM cho TCP/IP, SOCK_DGRAM cho UDP/IP Protocol: thiết lập là IPPROTO_TCP đối với TCP, IPPROTO_UDP đối với UDP Chương 2 2. Tạo socket trong windows - Địachỉ winsock quản lý địa chỉ thông qua SOCKADDR_IN structure SOCKADDR_IN structure có dạng sau struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; sin_family : AF_INET sin_addr : lưu trữ địa chỉ IP sin_port : port sin_zero : make the SOCKADDR_IN structure the same size as the SOCKADDR structure. Chương 2 3. Xây dựng chươngtrìnhgiaotiếpcókếtnối dùng winsock socket bind listen accept socket Address resolution connect Server client Chương 2 3. Xây dựng chươngtrìnhgiaotiếpcókếtnối dùng winsock 3.1 Server binding: int bind( SOCKET s, const struct sockaddr FAR* name, int namelen ); Khi socket đượctạoracần dùng hàm bind để bind tới địachỉ s: socket name: kiểu địachỉ socket struct sockaddr namelen: kích thướccủaname Chương 2 3. Xây dựng chươngtrìnhgiaotiếpcókếtnối dùng winsock Đoạnlệnh tạo socket và bind SOCKET s; SOCKADDR_IN tcpaddr; int port = 5150; s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); tcpaddr.sin_family = AF_INET; tcpaddr.sin_port = htons(port); tcpaddr.sin_addr.s_addr = htonl(INADDR_ANY); bind(s, (SOCKADDR *)&tcpaddr, sizeof(tcpaddr)); [...]... structure Chương 2 3 Xây dựng chương trình giao tiếp có kết nối dùng winsock Chương trình phía server: #include #pragma comment(lib, "wsock 32. lib") void main(void) { WSADATA wsaData; SOCKET ListeningSocket; SOCKET NewConnection; SOCKADDR_IN ServerAddr; SOCKADDR_IN ClientAddr; int Port = 5150; // Initialize Winsock version 2. 2 WSAStartup(MAKEWORD (2, 2), &wsaData); Chương 2 3 Xây dựng chương trình. .. Winsock version 2. 2 WSAStartup(MAKEWORD (2, 2), &wsaData); // Create a new socket to make a client connection Chương 2 3 Xây dựng chương trình giao tiếp có kết nối dùng winsock 3 .2 Client #include #pragma comment(lib, "wsock 32. lib") void main(void) { WSADATA wsaData; SOCKET s; SOCKADDR_IN ServerAddr; int Port = 5150; // Initialize Winsock version 2. 2 WSAStartup(MAKEWORD (2, 2), &wsaData);... NewConnection Chương 2 3 Xây dựng chương trình giao tiếp có kết nối dùng winsock Chương trình phía server: closesocket(NewConnection); closesocket(ListeningSocket); // When your application is finished handling the connections, // call WSACleanup WSACleanup(); Chương 2 3 Xây dựng chương trình giao tiếp có kết nối dùng winsock 3 .2 Client #include #pragma comment(lib, "wsock 32. lib") void... SendBuf[1 024 ]; int BufLength = 1 024 ; // Initialize Winsock version 2. 2 WSAStartup(MAKEWORD (2, 2), &wsaData); // Create a new socket to receive datagrams on SendingSocket = socket(AF INET, SOCK DGRAM, IPPROTO UDP); Chương 2 5 Xây dựng chương trình giao tiếp không kết nối dùng winsock ReceiverAddr.sin_family = AF_INET; ReceiverAddr.sin_port = htons(Port); ReceiverAddr.sin_addr.s_addr = inet_addr("136.149.3 .29 ");... WSACleanup WSACleanup(); } Chương 2 5 Xây dựng chương trình giao tiếp không kết nối dùng winsock hàm sendto int sendto( SOCKET s, const char FAR * buf, int len, int flags, const struct sockaddr FAR * to, int tolen ); to : trỏ tới địa chỉ cần send tới Chương 2 5 Xây dựng chương trình giao tiếp không kết nối dùng winsock Ví dụ hàm sentto #include #pragma comment(lib, "wsock 32. lib") void main(void)... main(void) { WSADATA wsaData; SOCKET ReceivingSocket; SOCKADDR_IN ReceiverAddr; int Port = 5150; char ReceiveBuf[1 024 ]; int BufLength = 1 024 ; SOCKADDR_IN SenderAddr; int SenderAddrSize = sizeof(SenderAddr); // Initialize Winsock version 2. 2 WSAStartup(MAKEWORD (2 2) &wsaData); Chương 2 5 Xây dựng chương trình giao tiếp không kết nối dùng winsock Ví dụ hàm recvfrom // Create a new socket to receive datagrams... Chương 2 4 Truyền/nhận dữ liệu Hàm WSARecv int WSARecv( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); Chương 2 5 Xây dựng chương trình giao tiếp không kết nối dùng winsock Server client socket socket bind Address resolution recvfrom sendto Chương 2 5 Xây dựng chương. .. call WSACleanup WSACleanup(); } Chương 2 6 Chế độ blocking của socket Nhận xét đoạn chương trình: SOCKET sock; char buff [25 6]; int done = 0, nBytes; while(!done) { nBytes = recv(sock, buff, 65); if (nBytes == SOCKET_ERROR) { printf("recv failed with error %d\n", WSAGetLastError()); Return; } DoComputationOnData(buff); } Chương 2 6 Chế độ blocking của socket Đoạn chương trình trên có trường hợp hàm rev... I/O 4 Truyền/nhận dữ liệu Ví dụ hàm send: char sendbuff [20 48]; int nBytes = 20 48, nLeft, idx; // Fill sendbuff with 20 48 bytes of data // Assume s is a valid, connected stream socket nLeft = nBytes; idx = 0; while (nLeft > 0) { ret = send(s, &sendbuff[idx], nLeft, 0); if (ret == SOCKET_ERROR) { // Error } nLeft -= ret; idx += ret; } Chương 2 Chương 2 4 Truyền/nhận dữ liệu Hàm recv and WSARecv int recv(.. .Chương 2 3 Xây dựng chương trình giao tiếp có kết nối dùng winsock Listenning: lắng nghe kết nối từ client int listen( SOCKET s, int backlog ); backlog : chiều dài tối đa của hàng đợi kết nối Chương 2 3 Xây dựng chương trình giao tiếp có kết nối dùng winsock accepting: chấp nhận kết nối SOCKET accept( SOCKET . môi trường mạng - Winsock đượchỗ trợ sẵn trong windows cho phép lậptrìnhmạng vớigiao thức TCP/IP hoặcIPX -Lập trình Winsock trong windows ta sử dụng thư viện WINSOCK2.H, WS2_ 32. LIB - Phiên bản. Chương 2: Lậptrìnhmạng trong windows Chương 2 1. Giớithiệuthư viện winsock -Giaotiếplậptrìnhmạng cho phép phát triển ứng dụng giao tiếp trên cùng một. = 5150; // Initialize Winsock version 2. 2 WSAStartup(MAKEWORD (2, 2), &wsaData); Chương 2 3. Xây dựng chươngtrìnhgiaotiếpcókếtnối dùng winsock Chương trình phía server: // Create a new socket

Ngày đăng: 30/07/2014, 04:20

TỪ KHÓA LIÊN QUAN

w