Chương 2 Lập trình mạng trong windows CuuDuongThanCong com https //fb com/tailieudientucntt http //cuuduongthancong com https //fb com/tailieudientucntt Chương 2 1 Giới thiệu thư viện winsock Giao tiế[.]
Trang 1Chương 2: Lập trình mạng trong windows
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 2một máy hoặc nhiều máy khác nhau thông qua môi trường mạng
- Winsock được hỗ trợ sẵn trong windows cho phép lập trình mạng với giao
thức TCP/IP hoặc IPX
- 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:
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 3- 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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 4- 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;
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 5Gọi hàm int WSACleanup(void);
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 6SOCKET socket (
int af, int type, int protocol );
af: họ địa chỉ giao thức, thiết lập là AF_INET nếu ta 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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 7winsock 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.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 8dùng winsock
socket
bind
listen
accept
socket
Address resolution connect
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 9dùng winsock
3.1 Server
binding:
int bind(
SOCKET s,
const struct sockaddr FAR* name,
int namelen
);
Khi socket được tạo ra cần dùng hàm bind để bind tới địa chỉ
s: socket
name: kiểu địa chỉ socket struct sockaddr
namelen: kích thước của name
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 10dùng winsock
Đoạn lệ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));
CuuDuongThanCong.com https://fb.com/tailieudientucntt