Twitter Delicious Facebook Digg Stumbleupon Favorites More

Thứ Năm

LẬP TRÌNH MẠNG VỚI THƯ VIỆN WINSOCK


I. Mở đầu


“Cho dù bạn học gì đi chăng nữa, bạn cũng phải sử dụng Internet” (BILL GATES)
Đó chính là nguyên nhân để tôi cố gắng hoàn thành bài viết này.
 Internet hay mạng máy tính ngày nay đã trở nên rất phổ biến bạn có
 thể lên mạng tìm kiếm thông tin, liên lạc với bạn bè, 
hay trong những giao dịch khác thư ra rút tiền ở ATM. 
Hệ thống điện thoại di động cũng là mạng. Tất cả đều là mạng…


Mặc dù cũng tiếp xúc nhiều với môi trường mạng
 (do chuyên ngành chính mà tôi chọn học là “mạng máy tính”) 
nhưng dường như tôi cũng ít khi nào lập trình đến mạng chủ yếu là PHP. 
Trong thời gian vừa qua tôi cũng đã nghiên cứu ít nhiều tới thư viện Winsock. 
Một thư viện lập trình mạng đa năng trên môi trường Windows và Linux
 là có lẽ lợi ít từ nó cũng rất to lớn.


Thiết nghĩ có lẽ cũng có rất nhiều người đang cần đến nó và tôi cũng muốn chia sẽ
 tất cả nhưng gì tôi biết đến mọi người.


Vậy những ai có thể lập trình mạng:
Chẳng cần bạn phải thật giỏi về lập trình, 
chẳng cần bạn phải biết lập trình trên Windows,
 MFC hay .NET. Hãy đơn giản vấn đề, lập trình mạng cũng không có gì to lớn lắm.
 Bạn biết sử dụng stdio.h, hay conio.h, math.h,… không? Có lẽ là nhiều bạn biết. 
Lập trình mạng chẳng qua là học cách sử dụng thư viện winsock.h của Visual C++ 
và đòi hỏi bạn phải biết chút ít về mạng mà thôi. 
Và môi trường chính là tôi giới thiệu sẽ là Windows32 Console Project.
Hy vọng sau bài viết này, các bạn sẽ viết được những chương trình có thể liên lạc
 trong mạng LAN như chat hay một WebSever mini chẳng hạn.


II. Thư viện Winsock


Để lập trình được Winsock chúng ta sẽ khai báo thư viện winsock.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à wsock32.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++.




Code:
#include <stdio.h>
#include <tchar.h>
...
#include <winsock.h>
#pragma comment (lib,"wsock32.lib")Và bây giờ sẽ là những hàm để khởi tạo Winsock:


Code:
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.:


Code:
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.


Code:
int WSACleanup (void);Chương trình đầu tiên:


Code:
#include "stdafx.h"


using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
WSADATA SData;
if (WSAStartup(0x0202,&SData)){
cout << "KHONG THE KHOI DONG SOCKET";
return 1;
}


cout << "KHOI TAO SOCKET THANH CONG: \n";
cout << "Phien ban: "<< SData.wVersion << "\n";
cout << "Phien ban co the ho tro: "<< SData.wHighVersion << "\n";
cout << "Ghi chu: " << SData.szDescription << "\n";
cout << "Trạng thái Winsock: " << SData.szSystemStatus << "\n";


WSACleanup();
return 0;
}


Sưu tầm

0 nhận xét:

Đăng nhận xét

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Blogger Templates