欢迎来到天天文库
浏览记录
ID:37540464
大小:219.91 KB
页数:29页
时间:2019-05-24
《《c-socket编程文档》》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Socket编程参考UNP第一卷chinaunix论坛一、基本知识主机字节序和网络字节序主机字节序即内存中存储字节的方法有:1.Littleendian:将低序字节存储在起始地址2.Bigendian:将高序字节存储在起始地址网络字序表示网络协议在处理多字节时的顺序,一律为bigendian主机字节序和网络字节序转换的函数:#includeuint16_thtons(uint16_t<16位的主机字节序>)uint32_thtonsl(uint32_t<32位的主机字节序>)//转换为网
2、络字节序uint16_tntohs(uint16_t<16位的网络字节序>)uint32_tntohl(uint32_t<32位的网络字节序>)//转换为主机字节序缓冲区每个TCPSOCKET有一个发送缓冲区和一个接收缓冲区,TCP具有流量控制,所以接收缓冲区的大小就是通知另一端的窗口的大小,对方不会发大于该窗口大小的数据;而UDPSOCKET只有一个接收缓冲区无流量控制,当接收的数据报溢出时就会被丢弃通信域(地址族)套接字存在于特定的通信域(即地址族)中,只有隶属于同一地址族的套接字才能建立对话。Linux支持A
3、F_INET(IPv4协议)、AF_INET6(IPv6协议)和AF_LOCAL(Unix域协议)。套接口(socket)=网络地址+端口号。,要建立一个套接口必须调用socket函数,套接口有三种类型,即字节流套接口(SOCK_STREAM),数据报套接口(SOCK_DGRAM)和原始套接口(SOCK_RAW)。定义一个连接的一个端点的两元组,即IP地址和端口号,称为一个套接口。在网络连接中,两个端点所组成的四元组(即本地IP、本地PORT、远程IP和远程PORT)称为socketpair,该四元组唯一的标识了一
4、个网络连接。该情况可通过netstat验证。二、socket地址结构1.IPv4的Socket地址结构(定长)Structin_addr{In_addr_ts_addr;//32位IP地址,网络字节序}Structsockaddr_in{Uint8_tsin_len;//IPv4为固定的16字节长度Sa_family_tsin_family;//地址簇类型,为AF_INETIn_port_tsin_port;//16位端口号,网络字节序Structin_addrsin_addr;//32位IP地址Charsin_z
5、ero[8];//未用}2.IPv6的socket地址结构(定长)structin6_addr{uint8_ts6_addr[16];//128位IP地址,网络字节序}structsockaddr_in6{uint8_tsin6_len;//IPv6为固定的24字节长度sa_family_tsin6_family;//地址簇类型,为AF_INET6in_port_tsin6_port;//16位端口号,网络字节序uint32_tsin6_flowinfo;//32位流标签structin6_addrsin6_add
6、r;//128位IP地址}3.UNIX域socket地址结构(变长)Structsockaddr_un,地址簇类型为AF_LOCAL4.数据链路socket地址结构(变长)structsockaddr_dl,地址簇类型为AF_LINK5.通用的socket地址结构structsockaddr{uint8_tsa_len;sa_family_tsa_family;charsa_data[14];}三、C/S网络编程初始化sock连接符:intsocket(intdomain,inttype,intprotocol);
7、函数返回socket描述符,返回-1表示出错domain参数只能取AF_INET,protocol参数一般取0应用示例:TCP方式:sockfd=socket(AF_INET,SOCK_STREAM,0);UDP方式:sockfd=socket(AF_INET,SOCK_DGRAM,0);绑定端口:intbind(intsockfd,structsockaddr*sa,intaddrlen);函数返回-1表示出错,最常见的错误是该端口已经被其他程序绑定。需要注意的一点:在Linux系统中,1024以下的端口只有拥有
8、root权限的程序才能绑定。连接网络(用于TCP方式):intconnect(intsockfd,structsockaddr*servaddr,intaddrlen);函数返回-1表示出错,可能是连接超时或无法访问。返回0表示连接成功,可以通过sockfd传输数据了。监听端口(用于TCP方式):intlisten(intsockfd,intqueue_le
此文档下载收益归作者所有