欢迎来到天天文库
浏览记录
ID:10846830
大小:754.50 KB
页数:40页
时间:2018-07-08
《socket网络编程指导》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Socket网络编程指导2021/9/81/37guoxiaol@mail.ustc.edu.cn什么是Socket?2021/9/82/37BSDSocket(伯克立套接字)是通过标准的UNIX文件描述符和其它程序通讯的一个方法,目前已经被广泛移植到各个平台。Socket是独立于具体协议的网络编程接口。在ISO模型中,主要位于会话层和传输层。Socket的类型2021/9/83/37流式套接字(SOCK_STREAM)提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。数据报式套接字(SOCK_
2、DGRAM)提供了一个无连接服务。数据包以独立包形式被发送,不提供无差错保证,数据可能丢失或重复,并且接收顺序无序。原始式套接字(SOCK_RAW)该接口允许对较低层次协议,如IP、ICMP直接访问。2021/9/84/37Socket所在层次示意图ApplicationprogramStreamSocketInterfaceTCPUDPDatagramSocketInterfaceRawSocketInterfaceIPPhysicalanddatalinklayers基本套接字调用2021/9/85/37创建套接字socket();绑定本机端口bind();建立连接connect()
3、;接受连接accept();监听端口listen();数据传输send(),recv()等;关闭套接字close();Socket相关的数据结构2021/9/86/37structsockaddr_in{shortintsin_family;/*通信类型*/unsignedshortintsin_port;/*端口号,网络字节顺序*/structin_addrsin_addr;/*Internet地址,网络字节顺序*/unsignedcharsin_zero[8];/*没用*/};structin_addr{in_addr_ts_addr;/*存储32bit的IP地址*/}网络字节顺序和
4、主机字节顺序2021/9/87/37Big-EndianByteOrder:字节的高位在内存中放在存储单元的起始位置0000101000010111000011100000011000001010000101110000111000000110MemoryLittle-EndianByteOrder:与Big-Endian相反AA+1A+2A+32021/9/88/40Hostbyteorder(Little-Endian)16-bit32-bitNetworkbyteorder(Big-Endian)16-bit32-bithtons()ntohs()htonl()ntohl()网络字
5、节顺序和主机字节顺序的转换IP地址的转换2021/9/89/37intinet_aton(constchar*strptr,structin_addr*addrptr);从点状十进制到32位2进制的转换,如“202.38.64.185”到11001010,00100110,01000000,10111001char*inet_ntoa(structin_addrinadd);与inet_aton()的功能相反相关的内存操作函数2021/9/810/37void*memset(void*buffer,intc,intcount);把buffer所指内存区域的前count个字节设置成字符c。
6、void*memcpy(void*dest,void*src,unsignedintcount);由src所指内存区域复制count个字节到dest所指内存区域。Voidbzero(void*s,intn);置字节字符串s的前n个字节为零。域名和IP地址的转换2021/9/811/37structhostent*gethostbyname(constchar*name);structhostent{char*h_name;/*主机的官方域名*/char**h_aliases;/*一个以NULL结尾的主机别名数组*/inth_addrtype;/*返回的地址类型,在Internet环境下为
7、AF-INET*/inth_length;/*地址的字节长度*/char**h_addr_list;/*一个以0结尾的数组,包含该主机的所有地址*/};#defineh_addrh_addr_list[0]/*在h-addr-list中的第一个地址*/建立Socket2021/9/812/37intsocket(intdomain,inttype,intprotocol);参数说明:domain:通信使用的协议族,即网络的类型,
此文档下载收益归作者所有