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
“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
Posted in: c++
0 nhận xét:
Đăng nhận xét