winsock.h(Socket编程)

来源:互联网 发布:大数据平台运维文档 编辑:程序博客网 时间:2024/05/17 23:09
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().

原创粉丝点击