WinSock API相关函数
WinSock提供了许多套接字函数,它们并不代表协议的某一个层次,其实质就是一组编程接口,用户利用这些函数可以很容易地进行编程。
(1)socket函数
socket函数用于创建一个套接字。
语法:
SOCKET socket (
int af,
int type,
int protocol
);
af:标识一个地址家族,通常为AF_INET。
type:标识套接字类型,如果为SOCK_STREAM,表示流式套接字;如果为SOCK_DGRAM,表示数据报套接字。
protocol:标识一个特殊的协议被用于这个套接字,通常为0,表示采用默认的TCP/IP协议。
(2)accpet函数
accpet函数用于接受客户端的连接请求。返回值是一个新的套接字,它对应于已经接受的客户端连接,对于该客户端的所有后续操作,都应使用这个新的套接字。
语法:
SOCKET accept (
SOCKET s,
struct sockaddr FAR* addr,
int FAR* addrlen
);
s:是一个套接字,它应处于监听状态。
addr:是一个sockaddr_in结构指针,包含一组客户端的端口号、IP地址等信息。
addrlen:用于接收参数addr的长度。
(3)bind函数
bind函数用于将套接字绑定到一个已知的地址上。如果函数执行成功,返回值为0,否则为SOCKET_ERROR。
语法:
int bind (
SOCKET s,
const struct sockaddr FAR* name,
int namelen
);
s: 是一个套接字。
name:是一个sockaddr结构指针,该结构中包含了要绑定的地址和端口号。
namelen:确定name缓冲区的长度。
在定义一个套接字后,需要调用bind函数为其指定本机地址、协议和端口号。
例如,创建一个套接字s,将其绑定到3010端口上,其代码如下:
int port = 3010;
SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
sockaddr_in addr;
addr.sin_family = AF_INET; //内部网络协议TCP\UDP等
addr.sin_port = htons(port); //端口号
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(s,(LPSOCKADDR)&addr,sizeof(addr))==0)
{
MessageBox("成功");
}
(4)closesocket函数
closesocket函数用于关闭某个套接字。
语法:
int closesocket (
SOCKET s
);
s:标识一个套接字。如果参数s设置有SO_DONTLINGER选项,则调用该函数后会立即返回,但此时如果有数据尚未传送完毕,会继续传递数据,然后才关闭套接字。
(5)connect函数
connect函数用于发送一个连接请求。如果函数执行成功,返回值为0,否则为SOCKET_ERROR。用户可以通过WSAGetLastError得到其错误描述。
语法:
int connect (
SOCKET s,
const struct sockaddr FAR* name,
int namelen
);
s:标识一个套接字。
name:套接字s想要连接的主机地址和端口号。
namelen:name缓冲区的长度。
(6)htons函数
htons函数将一个16位的无符号短整型数据由主机排列方式转换为网络排列方式。
语法:
u_short htons (
u_short hostshort
);
hostshort:一个主机排列方式的无符号短整型数据。
(7)htonl函数
htonl函数将一个32位的无符号长整型数据由主机排列方式转换为网络排列方式。
语法:
u_long htonl (
u_long hostlong
);
hostlong:一个主机排列方式的无符号长整型数据。
(8)inet_addr函数
inet_addr函数将一个由字符串表示的地址转换为32位的无符号长整型数据。
语法:
unsigned long inet_addr (
const char FAR * cp
);
cp:一个表示IP地址的字符串。
(9)listen函数
listen函数用于将套接字置入监听模式。
语法:
int listen (
SOCKET s,
int backlog
);
s:套接字。
backlog:表示等待连接的最大队列长度。例如,如果backlog被设置为3,此时有4个客户端同时发出连接请求,那么前3个客户端连接会放置在等待队列中,第4个客户端会得到错误信息。
(10)recv函数
recv函数用于从连接的套接字中返回数据。
语法:
int recv (
SOCKET s,
char FAR* buf,
int len,
int flags
);
recv函数参数的说明如表18.5所示。
表18.5 recv函数参数说明
参数名称 参 数 描 述
S 标识一个套接字
Buf 是接收数据的缓冲区
Len 是buf的长度
Flags 表示函数的调用方式,可选值如下:MSG_PEEK_用来查看传来的数据,在序列前端的数据会被复制一份到返回缓冲区中,但是这个数据不会从序列中移走MSG_OOB_用来处理Out-Of-Band数据
(11)select函数
select函数用来检查一个或多个套接字是否处于可读、可写或错误状态。
语法:
int select (
int nfds,
fd_set FAR * readfds,
fd_set FAR * writefds,
fd_set FAR * exceptfds,
const struct timeval FAR * timeout
);
select函数参数说明如表18.6所示。
表18.6 select函数参数说明
参数名称 参数描述
nfds 没有实际意义,只是为了和UNIX下的套接字兼容
readfds 标识一组被检查可读的套接字
writefds 标识一组被检查可写的套接字
exceptfds 是被检查有错误的套接字
timeout 标识函数的等待时间
(12)send函数
send函数在已经建立连接的套接字上发送数据。
语法:
int send (
SOCKET s,
const char FAR * buf,
int len,
int flags
);
send函数参数说明如表18.7所示。
表18.7 send函数参数说明
参数名称 参数描述
s 标识一个套接字
buf 是存放要发送数据的缓冲区
len 标识缓冲区长度
flags 标识函数的调用方式
(13)WSAStartup函数
WSAStartup函数用于初始化WS2_32动态库。它应该是应用程序第1个调用的Windows Socket函数,用于确定Windows Socket使用的版本。
语法:
int WSAStartup (
WORD wVersionRequested,
LPWSADATA lpWSAData
);
wVersionRequested:标识调用者使用的Windows Socket的版本,高字节记录修订版本,低字节记录主版本。例如,如果Windows Socket的版本为2.1,则高字节记录1,低字节记录2。
lpWSAData:记录Windows Socket的详细信息。
下面的代码用于确定Windows Socket使用的版本。
WSADATA wsd;
WSAStartup(MAKEWORD(2,2),&wsd);
14)WSACleanup函数
WSACleanup函数与WSAStartup函数是相对的,用于终止使用WS2_32动态库。
语法:
int WSACleanup (void);
(15)WSAAsyncSelect函数
WSAAsyncSelect函数用于将网络中发生的事件关联到窗口的某个消息中。
语法:
int WSAAsyncSelect (
SOCKET s,
HWND hWnd,
unsigned int wMsg,
long lEvent
);
WSAAsyncSelect函数参数说明如表18.8所示。
表18.8 WSAAsyncSelect函数参数说明
参数名称 参数描述
s 标识套接字
hWnd 标识窗口句柄
wMsg 标识窗口消息
lEvent 标识网络中的事件
转载于:https://blog.51cto.com/jiang890131/1879540
WinSock API相关函数相关推荐
- 《ASCE1885的网络编程》---Winsock APIのIP地址转换函数
在进行网络程序设计时,常常需要从键盘上输入用点分十进制记法表示的主机IP地址,这种IP地址在程序中一般是用ASCII字符串的形式存储的.在网络程序中,要把这种用点分十进制字符串表示的IP地址转换为用网 ...
- 基于Winsock API的VC网络编程实战
基于Winsock API的VC网络编程实战 随着计算机信息技术的飞速发展,互联网与人类社会的工作.生活越来越紧密相关,它已经成为人类获取.交流信息的重要途径和手段.所以当前对于开发人员来说,网络编程 ...
- WinSock API网络编程——TCP/IP协议详解
WinSock API网络编程--TCP/IP协议(http://www.impcas.ac.cn/usr/lujun/browse.asp?id=winsock_tcp) ...
- 网络编程之编写LSP进行Winsock API监控拦截或LSP注入
[1]工具介绍: 用到的工具:VS2015 语言:C/C++ 需要系统提供的动态链接库:1. sporder.dll //很多系统不自带着个dll,导致编译时缺少dll无法编译. (发布时必须将此dl ...
- 【愚公系列】2022年04月 微信小程序-地图的使用之API相关函数案例
文章目录 前言 一.API相关函数案例 1.wxml 2.js 3.wxss 4.实际效果 前言 地图基础属性: 属性 类型 默认值 必填 说明 最低版本 longitude number 是 中心经 ...
- .NET3.5中的高性能 Socket API
在 .NET Framework 2.0 版本中,System.Net.Sockets 命名空间提供了一个几乎拥有 Windows® WinSock Win32® API 的所有功能的 Socket ...
- Winsock开发网络通信程序的经典入门
Winsock开发网络通信程序的经典入门 对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Un ...
- WinSock网络编程实用宝典(一)
一.TCP/IP 体系结构与特点 1.TCP/IP体系结构 TCP/IP协议实际上就是在物理网上的一组完整的网络协议.其中TCP是提供传输层服务,而IP则是提供网络层服务.TCP/IP包括以 ...
- Winsock编程宝典(转帖)
--简单的 Winsock 应用程式设计 TCP连接建立与关闭 相信各位读者现在对於 Winsock 的定义.系统环境,以及一些 Winsock Stack及 Winsock 应用程式,都有基本的认识 ...
最新文章
- 中国版 Ubuntu Kylin 14.04 LTS 麒麟操作系统中文版发布下载 (Ubuntu天朝定制版)
- python-MySQLdb-练习
- SCO UNIXWARE 文件系统损坏,后恢复数据成功
- 【控制】《多无人机协同控制技术》周伟老师-第9章-单无人机目标跟踪飞行控制策略
- configure: error: Please fix the library issues listed above and try again.解决方案
- 基于Flask开发企业级REST API应用(一)
- 【面试必备】奉上最通俗易懂的XGBoost、LightGBM、BERT、XLNet原理解析
- Eureka 自我保护模式、健康检查机制、Eureka 元数据
- XML与XSD两兄弟
- MySQL报错:Incorrect string value: '\xE6\x9D\x82\xE8\xB4\xA7...' for column
- [iOS]在xcode的iOS虚拟机中对BLE(蓝牙4.0)进行调试
- 《数据库原理实验指导书》
- 7-35 英文字母的大小写转换
- TM4C123系列(三)————PWM输出
- ubuntu重新安装驱动
- lyapunov直接法
- 智能门锁怎么选(3)
- c语言 %-5d问题
- 植物大战僵尸花园花盆种类
- 机器人学笔记(改进)
热门文章
- linux 系统频率,Linux下CPU的手动频率设定
- MongoDB 运行状态、性能监控,分析
- 20190509杂题选讲
- 借助阿里AntUI元素实现两个Web页面之间的过渡——“Loading…”
- redhat 6.5 vnc 配置
- Office 365 Sway-移动设备推送利器
- (转)JavaScript导出Word后对Word分页的处理
- Linux 命令(77)—— killall 命令
- oracle数据库数据表误删后,恢复数据处理方式
- 洛谷P5108 仰望半月的夜空(后缀数组)