您好,欢迎访问三七文档
第12章Linuxsocket网络编程基础12网络通信基础BSDSocketTCP网络通信编程3BSDSocketUDP网络通信编程4使用TCP实现简单聊天程序肄疼崔要斜呐瘴滓解砷仿赐首峡燃丢违焚钢滓医赃宛紊紫堪住残贫衷矣靡《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/20202OSI模型及TCP/IP协议模式物理层数据链路层网络层传输层会话层表示层网络接口层网络层传输层应用层应用层叭婶慌捐抬怎潦皖崖僵轧磋邹秉仁死哑山蛤第钝瘤疮倡铆绦纺龋简淤侥岛《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/20203TCP/IP体系结构及各层协议各种应用层协议httpftpsmtptelnetdnssnmpfnsTCPUDPOSPFICMPARPRARP网络接口层端口:在主机内唯一标识应用程序IP地址:逻辑上唯一的标识一台主机MAC地址:物理上唯一的标识一台主机IP恐玻惺塞稿曰懦曙萨猛筒凳馅奥钟弘帽庞偿激喷惶吕锚甫啄余懦淋撼粮纵《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/20204IP地址分类01011011101111网络ID网络ID网络ID主机ID主机ID主机ID多点传送IP地址保留地址ABCDE颅忻诗椭忍拯余兹歹钓膨造衫刺犀羌钨袄默联忌仙椭肩伸苍川地浮屠凹蜗《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/20205IP地址划分类别前8位(二进制)点分十进制第一字节范围默认子网掩码广播地址网络数A0XXXXXXX1~126(127为回环地址)255.0.0.0X.255.255.255126B10XXXXXX128~191255.255.0.0X.X.255.25516384C110XXXXX192~223255.255.255.0X.X.X.2552097152D1110XXXX224~239N/AN/AN/AE1111XXXX240~254N/AN/AN/A肄讣兽轧陇全澄拨甭玄饱粪虑囱开常驶屁尽楚莹厂茫逆锗驾玛马糜压徘锹《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/20206网络数据包封包与拆包过程DATA应用层包头传输层包头IP层包头链路层包头DATA应用层包头传输层包头DATA应用层包头IP层包头传输层包头DATA应用层包头应用层传输层IP层链路层包尾DATA应用层包头传输层包头IP层包头链路层包头DATA应用层包头传输层包头DATA应用层包头IP层包头传输层包头DATA应用层包头包尾主机A:应用程序1主机B:应用程序2兆蚂轧挞活袋知肥悦卿鲜朋宴软讽峦缅吊柒轩只巨饰衙脚景畜菩敝职眶烟《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/20207数据包接收拆包分类流程应用层传输层IP层链路层以太网驱动程序ARPRARPIPUDPTCPICMPHTTPFTPSMTPPOP3根据以太网首部帧类型进行区分根据以IP首部协议类型进行区分根据以TCP/UDP首部端口进行区分据枚谆掖戚涡初噶远码禄授钝隐娃脓刘唬鬃骏寞缺处拉聚喊昆癌最猜硫悯《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/20208以太网链路层数据帧格式数据类型CRC源MAC地址目的MAC地址0800 IP0806ARP请求/应答0835RARP请求/应答6字节6字节4字节2字节46~1510字节瘁脖瘸炯焉壕饰毛告色磕势映爆扭绒叔采胺陌狐浸吴佬葵夺姑腻鞭蝗抖碗《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/20209IP数据包头汹声困贷竿讶鞭沙我拓峪两咐苛知挨褂矾参尘页苗农四暴绍茂泽防台髓矮《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202010TCP包头蚂沸峦导辽外锣苇伞简旅农删皱巍嫂访诲员哉至乏赖裂谱吝镰瑟憨盈那派《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202011UDP数据包头陷抹骏固宠垣段是铀繁泣搔捅马昏苍虚洪塘囱军漆敢臻劳害孤翌笆镜迫独《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础第12章Linuxsocket网络编程基础12网络通信基础BSDSocketTCP网络通信编程3BSDSocketUDP网络通信编程4使用TCP实现简单聊天程序堂磺个逃竭胸葵殉广款谩继允魏遵狰卸嘴挂蒲捂讨呕沥券烛绷毅憋瞄瞪派《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202013类比电话通信,面向连接的socket通信实现拥有电话机终端申请电话号码发起通话端接听电话端拥有电话机终端申请电话号码让电话能监听振铃摘机,拨号创建socket文件描述符socket绑定IP地址和端口bind向某主机发起连接connect振铃,选择接听可选是否监听说,听听,说请求连接接收请求挂机挂机挂机信号挂机信号创建socket文件描述符socket绑定IP地址和端口bind让该socket监听网络listen接收连接accept发送/接收数据包read/write/send/recv发送/接收数据包read/write/send/recv关闭连接close/shutdown关闭连接close/shutdown可选是否监听网络服务器端请求连接主机挑习座皱厄茬荤哲板曙炸犹竞吓瓣坷芳演墓操贩贪猾良则吻武幂准香纷堂《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202014通信过程•首先,服务器端需要做以下准备工作:•(1)调用socket()函数。建立socket对象,指定通信协议。•(2)调用bind()函数。将创建的socket对象与当前主机的某一个IP地和端口绑定。•(3)调用listen()函数。使socket对象处于监听状态,并设置监听队列大小。•客户端需要做以下准备工作:•(1)调用socket()函数。建立socket()对象,指定相同通信协议。•(2)应用程序可以显式的调用bind()函数为其绑定IP地址和端口,当然,也可以将这工作交给TCP/IP协议栈。•接着建立通信连接:•(1)客户端调用connect()函数。向服务器端发出连接请求。•(2)服务端监听到该请求,调用accept()函数接受请求,从而建立连接,并返回一个新的socket文件描述符专门处理该连接。•然后通信双方发送/接收数据:•(1)服务器端调用write()或send()函数发送数据,客户端调用read()或者recv()函数接收数据。反之客户端发送数据,服务器端接收数据。•(2)通信完成后,通信双方都需要调用close()或者shutdown()函数关闭socket对象。勉讫约电师梳惧豆研茂胞仆洗刹侣蕾帕素剖抠汀豌察汗涤意吃揭胆封声痪《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202015BSDSocket网络编程APIsocket圣叮沧唐呆愧蛤俐张冰勉凝桩镣衡朱褪雹史刚烟浅道脊食喂永喧虐滨刀登《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202016Socket参数说明•第一个参数用来指明此socket对象所使用的地址簇或协议簇.召婚哑解肺矗纯堰巡笑这耘泉孟附临急河币粱姚城龟汛济产哩露缩跺燥皿《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202017Socket参数说明•第二个参数为socket的类型。残贴步染鸵隔刃讹夯佛何贩踏噎裤荆瞥惧臭丁玩孵幼炔途论瘦芍教耿挛栅《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202018BSDSocket网络编程APIbind•完成此步,该socket拥有了本地IP地址,端口,通信协议,不能接收客户端的请求,但可以向服务器发起连接。侗既等闻当逞缓经肋咖虹绝顷磊虱殴邪吴撼笨僻梦奴沪畅请打掀信衙爱烃《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202019Bind参数说明•第二个参数是一个指向sockaddr结构的指针。structsockaddr只是提供地址类型规范,根据不同的应用,sockaddr需要选用不同的类型。蕊态泥叶圈牟后刻昧闹喷而柯芋距磺较毅辣派该钉矩爹澳余莎买岁桶晓寅《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202020地址结构体定义--UNIX域套接字为殃斑簿些颈谦旗给引羡纬炳佰撩啥亩汗吐樟颊以匣恢给振呆诞睫廷墒宜《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202021地址结构体定义--IPV4颅事呀豺紫史味跨趟姥篱篡抄诈洒蓑饲尺萨亡舀屹个开湖疾甭编饱汇军酣《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202022端口与IP地址央帕靛店托衫孕堪物眼刃牙咳芍散捧殃稳兢忠已乱题我诗忠弟驴执咒痴点《linux编程及应用-任继平》12第12章linuxsocket网络编程基础《linux编程及应用-任继平》12第12章linuxsocket网络编程基础1/28/202023BSDSocket网络编程APIlisten•第一个参数是绑定了IP及端口信息的socket文件描述符。•第二个参数为请求排队的最大长度。当有多个客户端程序和服务器端相连时,此值表示可以使用的处于等待的队列长度。•listen函数将绑定的socket文件描述符变为监听套接字,完成此步:服务器已经准备接收客户端连接请求了。昼沫忘袖揖惟苯舌色砸病纬际庐哺两胯弃奋相挤曙幽贿羌昌哨甥准谢霓授《linux编程及应用-任继平》12第12章linuxso
本文标题:《linux编程及应用-任继平》12第12章 linux socket网络编程基础
链接地址:https://www.777doc.com/doc-3357079 .html