预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Socket网络编程常用的结构及函数小结 IP地址的作用是标示计算机的网卡地址,每台计算机都有一个IP地址;端口,是指计算机中为了标示在计算机中访问网络的不同程序而设的编号,并不是网卡接线的端口,而是不同程序的逻辑编号,并不是实际存在的;域名,是用来代替IP地址来标示计算机的一种直观名称,例如百度网站的IP地址是202.108.22.43,这个IP地址没有任何逻辑含义,不便记忆,而www.baidu.com是一个便于记忆的名称,用于代替这个IP地址;套接字的本意是插座,在网络中用来描述计算机中不同程序与其他计算机程序的通信方式。 常用的套接字类型有3种: (1)流套接字(SOCK——STREAM):使用了面向连接的可靠的数据通信方式,即TCP协议; (2)数据报套接字(RawSockets):使用了不面向连接的数据传输方式,即UDP; (3)原始套接字(SOCK——RAW):没有经过处理的IP数据包,可以根据自己程序的要求进行封装。 网络协议是指不同的计算机、不同的操作系统在进行网络通信时的统一约定。网络服务指的是网络上的计算机通过运行程序为其他的计算机提供信息或运算的功能。 套接字相关的数据类型:sockaddr和sockaddr_in;sockaddr用来保存一个套接字,定义如下: structsockaddr { unsignedshortintsa_family;//指定通信地址类型,如果是TCP/IP通信,则值为AF_inet charsa_data[14];//最多用14个字符长度,用来保存IP地址和端口信息 }; sockaddr_in的功能与socdaddr相同,也是用来保存一个套接字的信息,不同的是将IP地址与端口分开为不同的成员,定义如下: structsockaddr_in { unsignedshortintsin_family;//指定通信地址类型 uint16_tsin_port;//套接字使用的端口号 structin_addrsin_addr;//需要访问的IP地址 unsignedcharsin_zero[8];//未使用的字段,填充为0 }; 在这一结构中,in_addr也是一个结构体,定义如下,用于保存一个IP地址: structin_addr { uint32_ts_addt; }; 用域名取得主机的IP地址: structhostent*gethostbyname(constchar*name); 结构体hostent的定义如下: structhostent { char*h_name;//正式的主机名称 char**h_aliases;//这个主机的别名 inth_addrtype;//主机名的类型 inth_length;//地址的长度 char**h_addr_list;//从域名服务器取得的主机地址 }; 用IP地址返回域名: structhostent*gethostbyaddr(constvoid*addr,socklen_tlen,inttype); 由协议名取的协议数据: structprotoent*getprotobyname(char*name); 结构体protoent定义如下: structprotoent { char*p_name;//协议的名称 char**p_aliases;//协议的别名 intp_proto;//协议的序号 }; 由协议编号取得协议信息: structprotoent*getprotobynumber(intproto); 取得系统支持的所有协议: structprotoent*getprotoent(void); 取得系统支持的网络服务: structservent*getservent(void); 结构体servent定义如下: structservent { char*s_name;//这个服务的名称 char**s_aliases;//这个服务可能的别名 ints_port;//这个服务可能的端口 char*s_proto;//这个服务可能使用的协议 }; 用名称取得系统所支持的服务: structservent*getservbyname(char*name,char*proto);//name:服务器名称,proto服务器所使用的协议; 由端口取得服务名称: structservent*getservbyport(intport,char*proto) //port是端口的编号,需要注意的是这个端口号需要用htons()函数进行转换,proto表示一个协议的字符串; 将网络地址转换成长整型: longinet_addr(char*cp);//cp表示一个IP地址字符串; 将长整型IP地址转换成网络地址即大小端模式转换