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 的组合.
发表评论
-
动静库
2012-01-20 12:18 738动静库 2010年12月16日 ... -
Gcc简易教程
2012-01-20 12:17 688Gcc简易教程 2010年06月13日 版权属于GodT ... -
qqCPUID 的一个汇编实例
2012-01-20 12:17 855qqCPUID 的一个汇编实例 ... -
编译程序与操作系统的关系
2012-01-20 12:17 869编译程序与操作系统的 ... -
strcpy没有声明 c++头文件详解
2012-01-20 12:17 2349strcpy没有声明 c++头文件详解 2010年10月23 ... -
python 常用类库!(转)
2012-01-19 17:00 674python 常用类库!(转) 2011年01月21日 ... -
前言:什么是Python?
2012-01-19 16:59 711前言:什么是Python? 2010年11月14日 py ... -
对比java和python
2012-01-19 16:59 1198对比java和python 2011年04 ... -
(转载)Python 应用发布技术
2012-01-19 16:59 728(转载)Python 应用发布技 ... -
Python 应用领域
2012-01-19 16:59 787Python 应用领域 2010年08 ... -
最真的爱(转)
2012-01-17 06:44 604最真的爱(转) 2011年11月25日 -
如何做好日用品的直销?
2012-01-17 06:44 669如何做好日用品的直销? 2011年11月22日 濡 -
安莉芳内衣亮相2011深圳国际内衣文化周
2012-01-17 06:44 653安莉芳内衣亮相2011深圳国际内衣文化周 2011年11月2 ... -
歌瑞尔内衣:一不小心“玩”大了
2012-01-17 06:44 697歌瑞尔内衣:一不小心“玩”大了 2011年11月26日 ... -
2011-12-12
2012-01-17 06:44 5532011-12-12 2011年12月12日 乱码体: -
给大学生学习ARM和FPGA的建议(转)
2012-01-16 05:33 1040给大学生学习ARM和FPGA的 ... -
HOOK API 函数跳转详解
2012-01-16 05:33 1038HOOK API 函数跳转详解 20 ... -
java的面试socket
2012-01-16 05:33 910java的面试socket 2010年05 ...
相关推荐
`WSAStartup`函数用于启动Winsock服务,确保后续可以正常调用其他Winsock API函数。 ##### 2. 参数说明 - **wVersionRequested**:指定想要使用的Winsock库的版本号,高位字节表示次版本号,低位字节为主版本号。...
本教材主要聚焦于PB的常用API函数,旨在帮助PB开发者深入理解和掌握这些函数的使用,提升开发效率和代码质量。以下是关于PB常用API函数的一些核心知识点: 1. **PB API函数基础**:PB API函数是PowerBuilder内置或...
本文将详细介绍一些常用的Windows API函数,帮助开发者快速理解和应用。 首先,我们来看消息相关的API函数: 1. **BroadcastSystemMessage**:这个函数用于将一条系统消息发送到系统中的所有顶级窗口。这在需要...
在这个“SDK常用API函数库”中,我们重点关注的是VC(Visual C++)环境下使用的API函数库。VC SDK为Windows平台上的C++开发者提供了丰富的功能,涵盖了系统调用、图形绘制、网络通信等多个方面。 首先,API...
2. **全面性**:不仅包含常用API,还包含了一些不常见的API,使得开发者在处理特定问题时有更多选择。 3. **索引功能**:提供索引,使得开发者可以通过关键词快速查找所需函数,提高开发效率。 4. **全文检索**:...
Windows API(应用程序编程接口)是微软为开发者提供的一组接口函数,用于构建在Windows操作...通过阅读如"VC__API函数分类大全.doc"、"C#常用函数列表.doc"等文档,可以深入理解每个函数的用途和用法,提升编程能力。
"精通Windows API函数"这一主题深入探讨了如何在Windows环境下利用这些函数实现各种功能,从而提升程序的性能和兼容性。以下是对这个主题的详细阐述: Windows API是微软为开发者提供的一个庞大的函数库,它包含了...
API函数覆盖了从图形用户界面(GUI)到系统管理、网络通信、文件操作等多个方面。下面我们将详细探讨一些重要的Windows API函数类别及其在开发中的应用。 1. **窗口和用户界面**:Windows API提供了创建、管理和...
本文将深入探讨几百个常用API函数的简介,旨在帮助那些在阅读MSDN(Microsoft Developer Network)文档时遇到困难的初学者。 首先,API函数在Windows编程中起着核心作用。例如,WinAPI函数如CreateWindow用于创建...
这篇详尽的“常用API大全”显然是一份极具价值的资源,为开发者提供了一站式的API参考。VB api32.chm文件可能是针对Visual Basic编程语言的一个API库,特别关注32位系统下的API调用。 1. **API的基础知识** - API...
通过学习这些Winsock API函数,开发者能够构建跨平台的网络应用程序,实现各种网络通信功能,例如创建服务器、客户端,发送和接收数据,以及处理网络错误等。熟练掌握Winsock API对于进行网络编程至关重要。在实际...
- **wsock32.lib**:这是Winsock API的链接库文件,必须将它添加到项目的链接器设置中,以便能够正确地链接到Winsock的API函数。 - **winsock.h**:这是一个头文件,包含了Winsock API的所有声明,需要在程序的开头...
Winsock API 1.1版本是较为常用的一个版本,它提供了两个主要的编程模型:阻塞模式和非阻塞模式。阻塞模式下,一个函数调用会直到操作完成才返回。非阻塞模式允许应用程序同时执行其他操作,但编程复杂度较高。 在...
**正文** 《Windows API 函数手册》是一份详尽的编程资源...全文检索和收藏功能使得快速定位和保存常用API变得更加便捷。这份手册不仅是初学者入门Windows编程的重要参考资料,也是经验丰富的开发者不可或缺的工具书。
虽然这些类非常方便使用,但如果想要更好地理解 Winsock API 编程技术,则应该探索如何使用底层的 API 函数来实现简单的 Winsock 网络应用。以下将分别介绍如何在服务器端和客户端操作 Socket,实现基于 TCP/IP 的...
这些API函数涵盖了图形用户界面(GUI)的创建、系统资源管理、网络通信、文件操作等多个方面,为开发者提供了丰富的功能。 Window API函数大全通常包含以下关键知识点: 1. **窗口创建与管理**:如`CreateWindowEx...
《易语言模块常用API详解》 易语言,作为一款国内自主研发的编程语言,以其独特的“易”学特性,深受广大编程爱好者的喜爱。在易语言的编程过程中,API(Application Programming Interface)扮演着至关重要的角色...
API函数库是操作系统提供给开发者用于实现特定功能的函数集合,如Windows API、OpenGL、Winsock等。字典中针对API部分,可能涵盖了常用函数的参数、返回值、使用示例和注意事项,使得开发者能够更顺畅地与操作系统...