Windows环境下进行socket编程

  • 编译环境
    操作系统 windows 10
    编译器 Dev-C++
  • 使用语言
    C语言

在Dev中编译socket程序,需要设置编译环境,有以下两种方法:

  1. 新建project为win32 console,

    然后在project的属性linker里面添加库libws2_32.a

    如果没有添加动态库,则编译时会出现连接错误。

  2. 菜单 “工具”——>“编译选项”——>“编译器”选项卡——勾选“编译时加入以下命令”,添加命令:-lwsock32

与Linux环境下socket编程相比,windows环境多了一个步骤:启动或者初始化winsock库

Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本:

Winsock 1:

Windows CE平台支持。

头文件:WinSock.h

库:wsock32.lib

Winsock 2:

部分平台如Windows CE貌似不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都属于Winsock 1.1规范的函数;

头文件:WinSock2.h

库:ws2_32.lib

mswsock.h用于编程扩展,使用时必须链接mswsock.dll

初始化

首先确保包含对应版本的头文件,然后保证链接对应的库文件

  • (可以在代码中使用#pragma comment(lib, "WS2_32"),或在编译器项目属性中链接器->输入->附加依赖项中添加ws2_32.lib)

winsock库的加载与卸载:

加载:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

加载成功,返回值为0。

WORD wVersionRequested:加载的winsock版本,使用宏MAKEWORD(x, y),x表示高字节,y表示低字节。然而使用时MAKEWORD(2, 2)。高字节与低字节相同~~

LPWSADATA lpWSAData:WSADATA结构的指针,传入参数后,系统帮助我们填充版本信息。有兴趣的可以看看结构体内容,不过基本用不着。

卸载:int WSACleanup(void);比起加载,卸载的函数真是轻松愉快。

原文地址:https://www.cnblogs.com/zyever/p/9220210.html