`
wwn15wwn
  • 浏览: 16423 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Winsock 常用API函数

 
阅读更多

Winsock 常用API函数
2011年04月29日
  (1) inet_ntoa():将一网路位址转换成「点格式」字串。
  格式: char FAR * PASCAL FAR inet_ntoa( struct in_addr in );
  参数: in 一个代表 Internet 位址的结构
  传回值: 成功 - 一个代表位址的「点格式」(dotted) 字串
  失败 - NULL
  说明: 此函式将一 Internet 位址转换成「a.b.c.d」字串格式。
  如下所示:
  #include
  char FAR* PASCAL FAR inet_ntoa( struct in_addr in);
  in:一个表示Internet主机地址的结构。
  注释:
  本函数将一个用in参数所表示的Internet地址结构转换成以“.” 间隔的诸如“a.b.c.d”的字符串形式。请注意inet_ntoa()返回的字符串存放在WINDOWS套接口实现所分配的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的下一个WINDOWS套接口调用前,数据将保证是有效。
  返回值:
  若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NULL。其中的数据应在下一个WINDOWS套接口调用前复制出来。
  参见:
  inet_addr().
  测试代码如下
  include
  #include
  #include
  #include
  #include
  int main(int aargc, char* argv[])
  {
  struct in_addr addr1,addr2;
  ulong   l1,l2;
  l1= inet_addr("192.168.0.74");
  l2 = inet_addr("211.100.21.179");
  memcpy(&addr1, &l1, 4);
  memcpy(&addr2, &l2, 4);
  printf("%s : %s\n", inet_ntoa(addr1), inet_ntoa(addr2));    //注意这一句的运行结果
  printf("%s\n", inet_ntoa(addr1));
  printf("%s\n", inet_ntoa(addr2));
  return 0;
  }
  实际运行结果如下:
  192.168.0.74 : 192.168.0.74       //从这里可以看出,printf里的inet_ntoa只运行了一次。
  192.168.0.74
  211.100.21.179
  inet_ntoa返回一个char *,而这个char *的空间是在inet_ntoa里面静态分配的,所以inet_ntoa后面的调用会覆盖上一次的调用。第一句printf的结果只能说明在printf里面的可变参数的求值是从右到左的,仅此而已。
  (2) htons(): 是对两个字节的数进行主机序到网络序的转换
  转换的过程举例如下:
  4367的十六进制为0x110F
  然后将高位和地位互换,就变成了0x0F11,
  而0x0F11的十进制为3857,
  所以htons(4367)=3857; 
  (3) inet_addr(): 将IP地址从点数格式转换成无符号长整型.
  如下所示:
  SOCKADDR_IN addrSrv;
  addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
  addrSrv.sin_family = AF_INET;
  addrSrv.sin_port = htons(6000);
  (4) ioctlsocket():控制 Socket 的模式。
  格式: int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR *argP );
  参数: s Socket 的识别码,cmd 指令名称,argP 指向 cmd 参数的指标
  传回值: 成功 - 0
  失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
  说明: 此函式用来获取或设定 Socket 的运作参数。其所提供的指令有:
  FIONBIO -- 开关 non-blocking 模式
  FIONREAD -- 自 Socket 一次可读取的资料量
  SIOCATMARK -- OOB 资料是否已被读取完 (*暂不提供此功能)
  (5) listen():设定 Socket 为监听状态,准备被连接。
  格 式: int PASCAL FAR listen( SOCKET s, int backlog );
  参 数: s Socket 的识别码,backlog 未真正完成连接前(尚未呼叫 accept() 前)彼端的连接要求的最大个数
  传回值: 成功 - 0
  失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
  说明: 使用者可利用此函式来设定 Socket 进入监听状态,并设定最多可有多少个在未真正完成连接前的彼端的连接要求。(目前最大值限制为 5, 最小值为1)
  (6) ntohl():将一 32 位元 u_long 的值由 network 排列方式转换成host 排列方式。
  格式: u_long PASCAL FAR ntohl( u_long netlong );
  参数: netlong 一个 32 位元 network 排列方式的数目
  传回值: 一个 32 位元 host 排列方式的数目
  说明: 因为 network 的排列方式与 host 的排列方式可能不同,所以我们需要此一函式来做转换。
  (7) ntohs():将一 16 位元 u_short 的值由 network 排列方式转换成host 排列方式。
  格式: u_short PASCAL FAR ntohs( u_short netshort );
  参数: netshort 一个 16 位元 network 排列方式的数目
  传回值: 一个 16 位元 host 排列方式的数目
  说明: 因为 network 的排列方式与 host 的排列方式可能不同,所以我们需要此一函式来做转换。
  (8) recv():自 Socket 接收资料。
  格式: int PASCAL FAR recv( SOCKET s,char FAR *buf,int len,int flags );
  参数: s Socket 的识别码,buf 存放接收到的资料的暂存区,len buf 的长度,flags 此函式被呼叫的方式
  传回值: 成功 - 接收到的资料长度 (若对方 Socket 已关闭,则为 0)
  失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
  说明: 此函式用来自连接式的 Datagram Socket 或 Stream Socket接收资料。对 Stream Socket 言,我们可以接收到目前有效的 (available)资料,但其数量不超过 len 的大小。若是此 Socket 设定 SO_OOBINLINE,且有 out-of-band 的资料未被读取,那麽只有 out-of-band 的资料被取出。
  对 Datagram Socket 言,只取出第一个 datagram;若是该 datagram 大於使用者提供的储存空间,那麽只有该空间大小的资料被取出,多馀的资料将遗失,且回覆错误的讯息。 flags 的值可为 MSG_PEEK、MSG_OOB(*暂不提供此功能)的组合.
  // 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=187&d=12u0hg
  (9) recvfrom():读取一个 Datagram,并储存资料来源的位址。
  格 式: int PASCAL FAR recvfrom( SOCKET s,char FAR *buf,int len,int flags,struct socketaddr FAR *from,int FAR *fromlen );
  参 数: s Socket 的识别码,buf 存放接收到的资料的暂存区,len buf 的长度,flags 此函式被呼叫的方式,from 资料来源的位址,fromlen from 的大小
  传回值: 成功 - 接收到的资料长度 (若对方 Socket 已关闭,则为 0)
  失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
  说明: 此函式用来读取资料并记录资料来源的位址。对 Stream Socket 言,其作用与 recv() 相同,参数 from 及 fromlen 将不被用到。
  (10) select():检查一或多个 Sockets 是否处於可读、可写或错误的状态。
  格式: int PASCAL FAR select( int nfds,fd_set FAR *readfds,fd_set FAR *writefds,fd_set FAR *exceptfds,const struct timeval FAR *timeout );
  参数: nfds 此参数在此并无作用,readfds 要被检查是否可读的 Sockets,writefds 要被检查是否可写的 Sockets,exceptfds 要被检查是否有错误的 Sockets,timeout 此函式该等待的时间。若为 NULL 时,表示 blocking,此函式会等到有事件发生。
  传回值: 成功 - 符合条件的 Sockets 总数 (若 Timeout 发生,则为 0)
  失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
  说明: 使用者可利用此函式来检查 Sockets 是否有资料可被读取,或是有空间可以写入,或是有错误发生。
  (11) send():使用连接式的 Socket 传送资料。
  格式: int PASCAL FAR send( SOCKET s,const char FAR *buf,int len,int flags );
  参数: s Socket 的识别码,buf 存放要传送的资料的暂存区,len buf 的长度,flags 此函式被呼叫的方式
  传回值: 成功 - 送出的资料长度
  失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
  说明: 此函式适用於连接式的 Datagram 或 Stream Socket 来传送资料。对 Datagram Socket 言,若是 datagram 的大小超过限制,则将不会送出任何资料,并会传回错误值。若是传送 (transport) 系统内之储存空间不够存放这些要传送的资料,send() 将会被 block 住,除非该 Socket 被设定为 non-blocking 模式。使用者亦须注意 send()函式执行完成,并不表示资料已经成功地送抵对方了。 flags 的值可设为 MSG_DONTROUTE(*暂不提供此功能)及 MSG_OOB 的组合.
  (12) sendto():将资料送到指定的目的地。
  格式: int PASCAL FAR sendto( SOCKET s,const char FAR *buf,int len,int flags,const struct sockaddr FAR *to,int tolen );
  参数: s Socket 的识别码,buf 存放要传送的资料的暂存区,len buf 的长度,flags 此函式被呼叫的方式,to 资料要送达的位址,tolen to 的大小
  传回值: 成功 - 送出的资料长度
  失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
  说明: 此函式适用於 Datagram 或 Stream Socket 来传送资料到指定的位址。对 Datagram Socket 言,若是 datagram 的大小超过限制,则将不会送出任何资料,并会传回错误值。对 Stream Socket 言,其作用与 send() 相同;参数 to 及 tolen 在此并无作用。 若是传送 (transport) 系统内之储存空间不够存放这些要传送的资料,sendto() 将会被 block 住,除非该Socket 被设定为 non-blocking 模式。使用者亦须注意 sendto() 函式执行完成,并不表示资料已经成功地送抵对方了。 flags 的值可设为 MSG_DONTROUTE(*暂不提供此功能)及 MSG_OOB 的组合.
分享到:
评论

相关推荐

    Winsock_API_基本函数

    `WSAStartup`函数用于启动Winsock服务,确保后续可以正常调用其他Winsock API函数。 ##### 2. 参数说明 - **wVersionRequested**:指定想要使用的Winsock库的版本号,高位字节表示次版本号,低位字节为主版本号。...

    pb常用API函数教材

    本教材主要聚焦于PB的常用API函数,旨在帮助PB开发者深入理解和掌握这些函数的使用,提升开发效率和代码质量。以下是关于PB常用API函数的一些核心知识点: 1. **PB API函数基础**:PB API函数是PowerBuilder内置或...

    window常用的API函数

    本文将详细介绍一些常用的Windows API函数,帮助开发者快速理解和应用。 首先,我们来看消息相关的API函数: 1. **BroadcastSystemMessage**:这个函数用于将一条系统消息发送到系统中的所有顶级窗口。这在需要...

    SDK 常用API函数库

    在这个“SDK常用API函数库”中,我们重点关注的是VC(Visual C++)环境下使用的API函数库。VC SDK为Windows平台上的C++开发者提供了丰富的功能,涵盖了系统调用、图形绘制、网络通信等多个方面。 首先,API...

    VB API 函数使用手册

    2. **全面性**:不仅包含常用API,还包含了一些不常见的API,使得开发者在处理特定问题时有更多选择。 3. **索引功能**:提供索引,使得开发者可以通过关键词快速查找所需函数,提高开发效率。 4. **全文检索**:...

    windows API函数大全

    Windows API(应用程序编程接口)是微软为开发者提供的一组接口函数,用于构建在Windows操作...通过阅读如"VC__API函数分类大全.doc"、"C#常用函数列表.doc"等文档,可以深入理解每个函数的用途和用法,提升编程能力。

    精通WindowsAPI函数

    "精通Windows API函数"这一主题深入探讨了如何在Windows环境下利用这些函数实现各种功能,从而提升程序的性能和兼容性。以下是对这个主题的详细阐述: Windows API是微软为开发者提供的一个庞大的函数库,它包含了...

    Windows api函数大全

    API函数覆盖了从图形用户界面(GUI)到系统管理、网络通信、文件操作等多个方面。下面我们将详细探讨一些重要的Windows API函数类别及其在开发中的应用。 1. **窗口和用户界面**:Windows API提供了创建、管理和...

    几百个常用的 API 函数的简介

    本文将深入探讨几百个常用API函数的简介,旨在帮助那些在阅读MSDN(Microsoft Developer Network)文档时遇到困难的初学者。 首先,API函数在Windows编程中起着核心作用。例如,WinAPI函数如CreateWindow用于创建...

    常用API大全 附用法和介绍!

    这篇详尽的“常用API大全”显然是一份极具价值的资源,为开发者提供了一站式的API参考。VB api32.chm文件可能是针对Visual Basic编程语言的一个API库,特别关注32位系统下的API调用。 1. **API的基础知识** - API...

    第8章 Winsock API_old

    通过学习这些Winsock API函数,开发者能够构建跨平台的网络应用程序,实现各种网络通信功能,例如创建服务器、客户端,发送和接收数据,以及处理网络错误等。熟练掌握Winsock API对于进行网络编程至关重要。在实际...

    VC++的Winsock API研究

    - **wsock32.lib**:这是Winsock API的链接库文件,必须将它添加到项目的链接器设置中,以便能够正确地链接到Winsock的API函数。 - **winsock.h**:这是一个头文件,包含了Winsock API的所有声明,需要在程序的开头...

    基于Visual C++的Winsock API研究

    Winsock API 1.1版本是较为常用的一个版本,它提供了两个主要的编程模型:阻塞模式和非阻塞模式。阻塞模式下,一个函数调用会直到操作完成才返回。非阻塞模式允许应用程序同时执行其他操作,但编程复杂度较高。 在...

    Windows API 函数手册

    **正文** 《Windows API 函数手册》是一份详尽的编程资源...全文检索和收藏功能使得快速定位和保存常用API变得更加便捷。这份手册不仅是初学者入门Windows编程的重要参考资料,也是经验丰富的开发者不可或缺的工具书。

    VC学习笔记之一:基于Visual_C++的Winsock_API研究.doc

    虽然这些类非常方便使用,但如果想要更好地理解 Winsock API 编程技术,则应该探索如何使用底层的 API 函数来实现简单的 Winsock 网络应用。以下将分别介绍如何在服务器端和客户端操作 Socket,实现基于 TCP/IP 的...

    WindowAPI函数大全

    这些API函数涵盖了图形用户界面(GUI)的创建、系统资源管理、网络通信、文件操作等多个方面,为开发者提供了丰富的功能。 Window API函数大全通常包含以下关键知识点: 1. **窗口创建与管理**:如`CreateWindowEx...

    易语言模块常用API.rar

    《易语言模块常用API详解》 易语言,作为一款国内自主研发的编程语言,以其独特的“易”学特性,深受广大编程爱好者的喜爱。在易语言的编程过程中,API(Application Programming Interface)扮演着至关重要的角色...

    Delphi、VB、TC、 API函数库速查字典 1.0

    API函数库是操作系统提供给开发者用于实现特定功能的函数集合,如Windows API、OpenGL、Winsock等。字典中针对API部分,可能涵盖了常用函数的参数、返回值、使用示例和注意事项,使得开发者能够更顺畅地与操作系统...

Global site tag (gtag.js) - Google Analytics