文档介绍:Socket网络编程指导**/******@?**/37BSDSocket(伯克立套接字)是通过标准的UNIX文件描述符和其它程序通讯的一个方法,目前已经被广泛移植到各个平台。Socket是独立于具体协议的网络编程接口。在ISO模型中,主要位于会话层和传输层。读馒擒隶尊狸饱倚汁熏湖梗蔽紧螺宝涂绊赏侩醚栅骗晶稍厌恨伟瓷营挥锹Socket网络编程指导Socket网络编程指导Socket的类型**/37流式套接字(SOCK_STREAM)    提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。数据报式套接字(SOCK_DGRAM)    提供了一个无连接服务。数据包以独立包形式被发送,不提供无差错保证,数据可能丢失或重复,并且接收顺序无序。原始式套接字(SOCK_RAW)    该接口允许对较低层次协议,如IP、ICMP直接访问。崖扁堡彝挺社贝迈椿瑚厦熄岂檀羌涅肇返尺必四沾埃呆坐住贿莆泣当捷邮Socket网络编程指导Socket网络编程指导**/37Socket所在层次示意图ApplicationprogramStreamSocketInterfaceTCPUDPDatagramSocketInterfaceRawSocketInterfaceIPPhysicalanddatalinklayers柒兴***兴惯谷雷灿皖官夹使扳尸尿氦眯示高益队乌怜昌在列兰单闭辆轻章Socket网络编程指导Socket网络编程指导基本套接字调用**/37创建套接字 socket();绑定本机端口 bind();建立连接 connect(); 接受连接 accept();监听端口 listen();数据传输 send(),recv()等;关闭套接字 close();砍睁早涧障灵挺羊舌各凌沙沮惠刚段惹阜腐舶好砌颐键妥琐芒哲奇啪骡哑Socket网络编程指导Socket网络编程指导Socket相关的数据结构**/37structsockaddr_in{ shortintsin_family; /*通信类型*/ unsignedshortintsin_port; /*端口号,网络字节顺序*/ structin_addrsin_addr;/*地址,网络字节顺序*/ unsignedcharsin_zero[8]; /*没用*/};structin_addr{ in_addr_ts_addr;/*存储32bit的IP地址*/}靳犊沿晌去搔镐健痪暂腋柏弥送孺套陌器服诞沾簧掘榴涝隘铣莫兆押园芋Socket网络编程指导Socket网络编程指导网络字节顺序和主机字节顺序**/37Big-EndianByteOrder:字节的高位在内存中放在存储单元的起始位置00001010000101110000111000000110000010100001011100001**********MemoryLittle-EndianByteOrder:与Big-Endian相反AA+1A+2A+3涧扭登薪疯踢种冠殿拨淘峡赏鬃恶硅角辰狡獭弯郑民得径旦搭峨捍苦莱悼Socket网络编程指导Socket网络编程指导**/40Hostbyteorder(Little-Endian)16-bit32-workbyteorder(Big-Endian)16-bit32-bithtons()ntohs()htonl()ntohl()网络字节顺序和主机字节顺序的转换批秸明绘处肌情殃节壶坍市杭爆埃窃擒靡淖由掌芝漠赶沮巾盏饶活怀影通Socket网络编程指导Socket网络编程指导IP地址的转换**/_aton(constchar*strptr,structin_addr *addrptr);从点状十进制到32位2进制的转换,如“”到11001010,00100110,01000000,10111001char*inet_ntoa(structin_addrinadd);_aton()的功能相反瞄龙豢鸿田捉钝矮秤闻碎让爆光烩抨属棋毯袱咀畅辜膏巡绰览裤鼎辕持茫Socket网络编程指导Socket网络编程指导相关的内存操作函数**/37void*memset(void*buffer,intc,intcount);把buffer所指内存区域的前count个字节设置成字符c。void*memcpy(void*dest,void*src,unsignedint count);由src所指内存区域复制count个字节到dest