Winsock2.h 常用库函数

1、WSAStartup函数
  用于初始化Winsock
  [声明]
  int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);
  [参数]
  wVersionRequested - 要求使用Winsock的最低版本号
  lpWSAData - Winsock的详细资料
  [返回值]
  当函数成功调用时返回0
  失败时返回非0的值
2、socket函数
  用于生成socket(soket Descriptor)
  [声明]
  SOCKET socket(int af,int type,int protocol);
  [参数]
  af - 地址家族(通常使用:AF_INET)
  type - socket的种类
  SOCK_STREAM : 用于TCP协议
  SOCK_DGRAM : 用于UDP协议
  protocol - 所使用的协议
  [返回值]
  当函数成功调用时返回一个新的SOCKET(Socket Descriptor)
  失败时返回INVALID_SOCKET.
3、inet_addr函数
  把好象"xxx.xxx.xxx.xxx"的10进制的IP地址转换为32位整数表示方法
  [声明]
  unsigned long inet_addr ( const char FAR *cp );
  [参数]
  cp - 指向用"xxx.xxx.xxx.xxx"的10进制来表示的IP地址字符串的指针
  [返回值]
  当函数成功调用时返回用32位整数表示的IP地址(按网络字节排列顺序)
  失败时返回INADDR_NONE.
4、gethostbyname函数
  可以从主机名获取主机资料.
  [声明]
  struct hostent FAR * gethostbyname ( const char FAR *name );
  [参数]
  name - 指向主机名字符串的指针
  [返回值]
  当函数成功调用时返回主机信息
  失败时返回NULL(空值)
5、Bind函数
  指定本地IP地址所使用的端口号时候使用
  [声明]
  int bind ( SOCKET s , const struct sockaddr FAR *addr , int namelen );
  [参数]
  s - 指向用Socket函数生成的Socket Descriptor
  addr - 指向Socket地址的指针
  namelen - 该地址的长度.
  [返回值]
  当函数成功调用时返回0
  调用失败时返回 SOCKET_ERROR
6、connect函数
  用于与服务器建立连接,发出连接请求,必须在参数中指定服务器的IP地址和端口号
  [声明]
  int connect (SOCKET s , const struct sockaddr FAR *name , int namelen );
  [参数]
  s - 指向用Socket函数生成的Socket Descriptor
  name - 指向服务器地址的指针
  namelen - 该地址的长度.
  [返回值]
  当函数成功调用时返回0
  调用失败时返回 SOCKET_ERROR
7、select函数
  可以用于调查一个或多个SOCKET的状态.
  [声明]
  int select ( int nfds , fd_set FAR *readfds , fd_set FAR *writefds , fd_set FAR *exceptfds , const struct timeval FAR *timeout );
  [参数]
  nfds - 在WINDOWS SOCKET API 中该参数可以忽略,通常赋予NILL值
  readfds - 由于接受的SOCKET设备的指针
  writefds - 用于发送数据的SOCKET设备的指针
  exceptfds - 检查错误的状态
  timeout - 超时设定
  [返回值]
  返回大于0的值时,表示与条件相符的SOCKET数
  返回0表示超时
  失败时返回SOCKET_ERROR
8、recv函数
  利用Socket进行接受数据.
  [声明]
  int recv ( SOCKET s , char FAR *buf , int len , int flags );
  [参数]
  s - 指向用Socket函数生成的Socket Descriptor
  buf - 接受数据的缓冲区(数组)的指针
  len - 缓冲区的大小
  flag - 调用方式(MSG_PEEK 或 MSG_OOB)
  [返回值]
  成功时返回收到的字节数.
  如果连接被中断则返回0
  失败时返回 SOCKET_ERROR
9、sendto函数

利用Socket进行发送数据.
  [声明]
  int sendto ( SOCKET s , const char FAR *buf , int len , int flags , const struct sockaddr FAR *to , int token );
  [参数]
  s - 指向用Socket函数生成的Socket Descriptor
  buf - 接受数据的缓冲区(数组)的指针
  len - 缓冲区的大小
  flag - 调用方式(MSG_DONTROUTE , MSG_OOB)
  to - 指向发送方SOCKET地址的指针
  token - 发送方SOCKET地址的大小
  [返回值]
  成功时返回已经发送的字节数.

失败时返回SOCKET_ERROR

10、listen()函数(补充)

(1)简述

创建一个套接口并监听申请的连接.

#include <winsock.h>

int PASCAL FAR listen( SOCKET s, int backlog);

S:用于标识一个已捆绑未连接套接口的描述字。

backlog:等待连接队列的最大长度。

(2)注释

为了接受连接,先用socket()创建一个套接口,然后用listen()为申请进入的连接建立一个后备日志,然后便可用accept()接受连接了。listen()仅适用于支持连接的套接口,如SOCK_STREAM类型的。套接口s处于一种“变动”模式,申请进入的连接请求被确认,并排队等待被接受。这个函数特别适用于同时有多个连接请求的服务器;如果当一个连接请求到来时,队列已满,那么客户将收到一个WSAECONNREFUSED错误。

当没有可用的描述字时,listen()函数仍试图正常地工作。它仍接受请求直至队列变空。当有可用描述字时,后续的一次listen()或accept()调用会将队列按照当前或最近的“后备日志”重新填充,如有可能的话,将恢复监听申请进入的连接请求。

(3)兼容性

后备日志当前被(默认地)限制为5。如同4.3 BSD Unix中的一样,小于1或大于5的数都会被舍入最近的有效值。

(4)返回值

如无错误发生,listen()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。

(5)错误代码

WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。

WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。

WSAEADDRINUSE:试图用listen()去监听一个正在使用中的地址。

WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。

WSAEINVAL:该套接口未用bind()进行捆绑,或已被连接。

WSAEISCONN:套接口已被连接。

WSAEMFILE:无可用文件描述字。

WSAENOBUFS:无可用缓冲区空间。

WSAENOTSOCK:描述字不是一个套接口。

WSAEOPNOTSUPP:该套接口不正常listen()调用。

参见:

accept(), connet(), socket().

转载于:https://blog.csdn.net/yuzhongchun/article/details/7572412

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值