Ethernet⼩记(WinSock2.h)相关函数说明
1.WSAStartup();
// 原型
1 int WSAStartup(
2  __in          WORD wVersionRequested,
3  __out        LPWSADATA lpWSAData
4);
作⽤:初始化Ws2_32.dll的函数,如果调⽤成功,WSAStartup 函数返回0。
WORD wVersionRequested 标识了⽤户调⽤的Winsock的版本号。⾼字节指明辅版本编号,低字节指明主版本编号。通常使⽤MAKEWORD来⽣成⼀个版本号。 当前Winsock sockets的版本号为2.2,⽤到的dll是 Ws2_32.dll;
lpWSAData指向WSADATA结构体的指针,返回了系统对Windows Sockets 的描述。
例如:
// 初始化Ws2_32.dll的函数
WSAStartup(MAKEWORD(2,2),&wsa);
作⽤:获取本地主机名;
// 原型
int gethostname(char *name, size_t len);
这个函数需要两个参数:
接收缓冲区name,其长度必须为len字节或是更长,存获得的主机名;
接收缓冲区name的最⼤长度
返回值:
如果函数成功,则返回0。如果发⽣错误则返回-1。错误号存放在外部变量errno中。
作⽤:⽤域名或主机名获取IP地址;
// 原型
struct hostent *gethostbyname(const char *name);
返回hostent结构体类型指针。
4.inet_ntoa()
作⽤:该函数将⼀个⽹络字节顺序的IP地址转换为它所对应的点分⼗进制串;
// 原型
char FAR*PASCAL FAR inet_ntoa( struct in_addr in);
5.WSACleanup()
作⽤:释放Ws2_32.dl的l函数(该函数释放对Winsock链接库的调⽤)。
// 原型
int WSACleanup(void);
返回值0表⽰正常退出,
6.setsockopt()
作⽤:⽤于任意类型、任意状态套接⼝的设置选项值。
// 原型
int setsockopt(
_In_ SOCKET s,
_In_ int level,
_In_ int optname,
_In_reads_bytes_opt_(optlen)const char FAR* optval,
_In_ int optlen
);
作⽤:⽤于任意类型、任意状态套接⼝的设置选项值。
// 原型
int getsockopt(
_In_ SOCKET s,
_In_ int level,
_In_ int optname,
_Out_writes_bytes_(*optlen) char FAR* optval,
_Inout_ int FAR* optlen
);
作⽤:数⽤于获取任意类型、任意状态套接⼝的选项当前值,并把结果存⼊optval。
8.bind()
作⽤:bind函数将socket关联⼀个本地地址。
// 原型
1 int bind(
2  __in          SOCKET s,
3  __in          const struct sockaddr* name,
4  __in          int namelen
5);
参数说明:
s:指定⼀个未绑定的socket。
name:指向sockaddr地址的指针,该结构含有IP和PORT;
namelen:参数name的字节数。
⽆错误返回0,⼜错误返回SOCKET_ERROR。
作⽤:客户端请求服务端连接。connect函数建⽴到指定套接字的连接。
// 原型
1 int connect(
2  __in          SOCKET s,
3  __in          const struct sockaddr* name,
4  __in          int namelen
5);
参数说明同bind();
0表⽰正确,否则,将返回SOCKET_ERROR。如果是阻塞式的socket连接,返回值代表了连接正常与失败。// 原型
int select
(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds,
const struct timeval* timeout);
参数说明;
nfds: 本参数忽略,仅起到兼容作⽤,设为0即可;
readfds: (可选)指针,指向⼀组等待可读性检查的套接⼝;
writefds: (可选)指针,指向⼀组等待可写性检查的套接⼝;
exceptfds:(可选)指针,指向⼀组等待错误检查的套接⼝;
timeout: 本函数最多等待时间,对阻塞操作则为NULL。
返回值:
(1)select()调⽤返回处于就绪状态并且已经包含在fd_set结构中的描述字总数;
(2)如果超时则返回0;
(3)否则的话,返回SOCKET_ERROR错误,应⽤程序可通过WSAGetLastError()获取相应错误代码。
11.send(),recv()
作⽤:The send function sends data on a connected socket。The recv function receives data from a connected or bound socket.
// send()原型
1 int send(
write的返回值
2  __in          SOCKET s,
3  __in          const char* buf,
4  __in          int len,
5  __in          int flags
6);
// recive()原型
1 int recv(
2  __in          SOCKET s,
3  __out        char* buf,
4  __in          int len,
5  __in          int flags
6);
参数说明;
s:标识/描述已链接到的套接字标识符/描述符;
buf:传输数据的buf;
len:待发送/待接收的数据长度;
flags:send(recv)函数的发送(接收)数据⽅式。MSDN给了以下⼏种发送⽅式:1:MSG_DONTROUTE; 2:
MSG_OOB(Sends OOB data (stream-style socket such as SOCK_STREAM only); 3:0.
返回值:
send的返回值标识已发送数据的长度,这个值可能⽐参数len⼩,这也意味着数据缓冲区没有全部发出去,要进⾏后续处理。返回SOCKET_ERROR标识send出错。
recv的返回值标识已接收数据的长度。如果连接已关闭,返回值将是0。返回SOCKET_ERROR标识re
cv出错。
本⽂仅⽤作知识⼩记与分享,感谢⽂章中的参考,如有侵权,请联系作者删除。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。