Winsock使用之开始使用Winsock

关于服务器和客户端

有两种不同类型的socket网络应用程序:服务器和客户端。
服务器和客户端有不同的行为;因此,创建他们的过程是不同的。以下是用于创建流的 TCP/IP 服务器和客户端的一般模型。
Server
  • 初始化Winsock
  • 创建socket
  • 绑定(Bind)socket
  • 在socket上侦听(Listen)客户端
  • 接受(Accept)来自客户端的连接
  • 接收(Receive)和发送(Send)数据
  • 断开连接
Client
  • 初始化Winsock
  • 创建socket
  • 连接(Connect)服务器
  • 发送(Send)和 接收(Receive)数据
  • 断开连接
注:服务器和客户端 上的一些步骤是相同的。这些步骤实施,几乎完全一样。本引导中的步骤将只限定此创建的应用程序。

创建一个基本的Winsock应用

1.新建一个空工程;
2.添加C++源文件到工程中;
3.保证编译环境能够找到 Microsoft Windows Software Development Kit (SDK) 和早期 Platform Software Development Kit (SDK)的Include, Lib, Src目录;
4.保证编译环境链接到Winsock库文件 Ws2_32.lib ,使用 #pragma comment 链接到 Ws2_32.lib;
5.开始编写Winsock应用程序
  • 包含头文件 winsock2.h 使用 Winsock API,winsock2.h 包括了大部分的 Winsock 函数,结构体及定义
  • 包含头文件 ws2tcpip.h ,其包含了Winsock2 的TCP/IP协议特定附件文件的定义
  • 包含头文件 stdio.h,用于标准输入输出,特别是 printf() 函数

#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>

#pragma comment(lib, "Ws2_32.lib")

int main() {
  return 0;
}
注意:
(1)如果要使用 IP Helper APIs,就需要包含 iphlpapi.h 文件,然后#include <winsock2.h> 需要编写在 #include <iphlpapi.h>前面;
(2)winsock2.h 内部包含了 windows.h 的核心元素,所以在Winsock应用中就不必包含windows.h;如果需要包含,就需要在前面定义 #define WIN32_LEAN_AND_MEAN 宏;
(3)历史原因,windows.h默认包含winsock.h(Windows Sockets 1.1),winsock.h 和 winsock2.h(Windows Sockets 2.0)会产生冲突,以上宏就是防止winsock.h被包含进windows.h。
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <stdio.h>

#pragma comment(lib, "Ws2_32.lib")

int main() {
  return 0;
}

初始化Winsock

所有需要调用Winsock中函数的程序,都必须在调用前来启动应用 Windows Sockets DLL
1.创建WSADATA 对象
<span style="font-size:18px;">WSADATA wsaData;</span>
2.调用WSAStartup,返回一整型,检查错误
int iResult;

// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
    printf("WSAStartup failed: %d\n", iResult);
    return 1;
}

小结:
(1)WSAStartup函数用于启动应用WS2_32.dll;
(2)WSADATA结构体包括了Windows Sockets执行的信息;
(3)参数MAKEWORD(2,2) 是对Winsock2.2版本请求,设置以前版本作为最高版本支持调用



编辑于2016年8月2日 By Seefun_Zhu


猜你喜欢

转载自blog.csdn.net/zhuxipan1990/article/details/52097960
今日推荐