




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,网络编程语言和套接字基础知识概述,网络应用程序模型,.,2,内容提要,操作系统应用空间编程可用各种高级语言C/C+,Java,delphi,VBC语言常见注意事项文件操作字符串操作函数指针应用程序结构有关资料和注意事项常用C语言开发环境套接字基础知识,.,3,操作系统的应用空间编程,可以使用常见的高级语言编程Java:具有良好的可移植性,但需要虚拟机VB,delphi:使用简单,只用于Windows环境C/C+:高效,各种操作系统支持的语言使用C语言作为网络编程语言的优势具有多种操作系统支持,几乎所有执行效率高编程灵活,要求高可以进行系统内核编程具有大量开源项目,.,4,C语言文件操作,fopen和open的区别fopen是ANSIC的标准,可移植open更加底层,linux系统,打开设备fwrite和fread二进制,记录操作fgetc,fgets和fputc,fputs字符和字符串操作fseek,ftell,feof如何获取文件大小?,.,5,读取内容赋值给数据结构变量,数据结构例子structstudentcharname12;shortage;intweight;structstudent*man;man=(structstudent*)malloc(sizeof(structstudent);.num=fread(man,sizeof(structstudent),1,filestream);man-age+;.fwrite(man,sizeof(structstudent),1,filestream);,.,6,字符串函数,char*p,str100;数组名str是恒定的指针,p是指针变量;sprintf(fprintf,printf)将多个变量格式化输出到一个字符串中。(输出到文件中,输出到屏幕中)memset(str,0,100):置初值为0;memcpy,strcpy:拷贝内存或者字符串;memcmp,strcmp:内存比较或者字符串比较;strstr,strchr:字符串查找或者字符查找;strlen:字符串长度,.,7,将数据结构表现为字符串,sprintf(p,name=%snage=%dnweight=%dnn,man-name,man-age,man-weight);p=name=zhangshan(换行)age=18(换行)score=66(换行)(换行)需要先执行:p=str;不然p没有空间。如何从p这个字符串中找到分数值?p=strstr(str,weight=);if(p!=NULL)weight=atoi(p+7);,.,8,如何表示链表,structstudentcharname12;shortage;intweight;structstudent*next;structstudent*head,*last,*tmp;for(i=0;inext=tmp;last=tmp;,.,9,函数指针的应用,函数名可以作为一个函数的指针可以定义一个指针变量来保存函数名例子结构定义:structnet_proto_familyintfamily;int(*create)(structnet*net,structsocket*sock,intprotocol,intkern);structmodule*owner;inet;函数定义:intcreate_TCP(structnet*net,structsocket*sock,intprotocol,intkern).赋值:inet.create=create_TCP;使用:intret=inet.create(pnet,psock,tcp,kern);,.,10,C语言程序构成,头文件宏定义固定值用有意义的名字表示数据结构定义,类定义函数定义和全局外部变量定义C文件包含头文件定义变量函数实现分类,有序缩进规范,注释,空格.,.,11,C开发环境,linuxgcc+gdbmakefile的编写WindowsVC+6.0VS系列C+BUILDERQt,EclipseC+ACE,.,12,文本界面和图形用户界面,文本界面所有输入是getc,getch,gets之类所有输出用printf不美观,命令行,适用控制台程序,服务器图形用户界面Qt,VC,VS需要理解C+理解windows消息机制实用于客户端程序,.,13,C+,VC+,MFC,C+是C语言的超集,增加了面向对象的特色;适合开发大型软件;VC+使用了MS对C+的扩展,是可视化的C+开发环境;MFC是MS基础类库,以C+类的形式封装了WindowsAPI,并且包含一个应用程序框架,以减少应用程序开发人员的工作量具体内容参见有关资料课件;,.,14,网络应用程序基础知识,什么是套接字网络通信标准网络应用程序的模型C/SP2P混合模式网络地址及其他问题套接字的实现简述,.,15,什么是套接字,TCP/IP协议存在于OS中,网络服务通过OS提供在OS中增加支持TCP/IP的系统调用Berkeley套接字如socket,connect,send,recv等socket是1981提出于BSD4.1UNIX,.,16,什么是套接字,1.套接字是一个主机本地应用程序所创建的,为操作系统所控制的接口(“门”).2.应用进程通过这个接口,使用传输层提供的服务,跨网络发送(/接收)消息到(/从)其他应用进程。3.Client/server模式的通信接口套接字接口.,.,17,套接字API,来自UNIX系统,目前在linux,windows皆实现。Berkeley套接字ARPA要求伯克利分校将TCP/IP移植到UNIX中需要创建一个接口,便于应用程序使用这个接口进行网络通信尽可能使用现有的系统调用,同时添加新的系统调用支持TCP/IP。这个系统被称为BSDUNIX套接字,成为事实上的标准,.,18,Winsock,伯克利套接口在Windows平台上的移植版本称为Winsock。它不仅包含BSDsocket的大部分函数还包含一组针对Windows系统的扩展库函数通常以字母WSA打头编程人员能充分利用windows的消息机制以及Win32平台下的高性能I/O模型。不同的TCP/IP协议栈供应商需要提供自己的Winsock接口实现的动态链接库标准winsock库,如WS2_32.dll等,.,19,什么是网络应用程序,网络应用程序:能够运行在不同的端系统并通过网络彼此通信的程序例如Web:Web服务器软件和浏览器软件通信实现应用层协议,没有应用程序软件运行在网络核心设备上网络核心设备不在应用层起作用这种设计方法促进了应用程序的研发,.,20,一些网络应用,电子邮件Web即时讯息远程登陆P2P文件共享在两台计算机之间的两个帐户之间的文件传输,多用户网络游戏流式存储视频片段因特网电话实时视频会议,.,21,网络应用程序模型(体系结构),客户机/服务器体系结构P2P体系结构客户机/服务器和P2P混合的体系结构,.,22,客户机/服务器体系结构,服务器:总是打开的主机具有固定的、众所周知的IP地址主机群集常被用于创建强大的虚拟服务器客户机:同服务器端通信可以间断的同服务器连接可以拥有动态IP地址客户机相互之间不直接通信,.,23,纯P2P体系结构,没有总是打开的服务器任意一对主机直接相互通信对等方间歇连接并且可以改变IP地址例如:Gnutella,emule优点:自扩展性缺点:难以管理,.,24,客户机/服务器和P2P混合,emule文件直接在对等方之间交换文件搜索通过服务器中心服务器记录对等方内容对等方查询中心服务器来决定要求的文件位置即时讯息两个聊天用户之间是P2P注册、查询通过服务器用户上线时要在中心服务器上进行注册用户与中心服务器联系以找出在线伙伴,.,25,进程通信,进程:运行在端系统中的程序同一主机上的两个进程通过内部进程通信机制进行通信不同主机上的进程通过交换报文相互通信,客户机进程:发起通信的进程服务器进程:等待联系的进程,注意:具有P2P体系结构的应用程序有客户机进程和服务器进程。,.,26,进程与计算机网络的接口-套接字,进程通过它的套接字在网络上发送和接收报文套接字类比于门户发送进程把报文推出门户发送进程假定门户到另外一侧之间有运输设施,该设施可以传送报文到接收进程,套接字又叫做应用程序编程接口API用户通过API对传输层的控制仅限于:(1)选择传输协议;(2)能设定几个参数,.,27,网络进程寻址,为了一个进程能接收报文,它需要一个标识主机有唯一的32位IP地址问:主机的IP地址足够标识进程吗?答:不能。因为一台主机上能够运行许多进程。,主机上的进程标识包括IP地址和端口号常用应用程序的端口号:Web服务:80邮件服务:25报文如何定位一个进程UDP:目的IP和端口TCP:目的IP和端口源IP和源端口,.,28,套接字的类型,网络系统提供了三种不同类型的套接口:流式套接口(SOCK_STREAM)TCP数据报套接口(SOCK_DGRAM)UDP原始套接口(SOCK_RAW)ICMP,.,29,套接字的类型,SOCK_STREAM:流套接口,对应于TCP协议,。也称面向连接的套接口、TCP套接口等。SOCK_DGRAM:数据报套接口,对应于UDP协议,也称无连接套接口、面向消息套接口、UDP套接口等。SOCK_RAW:原始套接口,可以读写ICMP、IGMP报文;从IP头起构造自己的报文;接受发向本机的但TCP/IP栈不能够处理的IP包。,.,30,地址表示与地址操作函数,sockaddr_inINET协议族地址结构in_addrIPv4地址结构sockaddr通用地址结构地址操作函数,.,31,INET协议族地址结构sockaddr_in,地址结构名中的最后两个字母“in”,是Internet的简写,说明该结构仅适用于采用TCP/IP协议的网络。结构定义如下:structsockaddr_inshortsin_family;/地址族u_shortsin_port;/端口号structin_addrsin_addr;/IP地址charsin_zero8;,.,32,INET协议族地址结构sockaddr_in,sin_family:地址族,一般填为AF_INET。另一组和AF_XXX类似的PF_XXX常量,与AF_INET相对应有PF_INET。历史上,PF_XXX被设计用于表示协议族,而AF_XXX用于表示地址族。最初的设想是单个协议族可以支持多个地址族,PF_XXX用于套接口的创建,AF_XXX用于套接口地址结构。在一般操作系统中,PF_XXX被定义为与AF_XXX值完全相同。sin_port:16位的IP端口,必须注意字节序问题。sin_addr:32位的IPv4地址。,.,33,INET协议族地址结构sockaddr_in,sin_zero:8个字节的0值填充,惟一的作用是使sockaddr_in结构大小与通用地址结构sockaddr相同。一般在给结构体赋值之前先将其全部初始化为零。下面的两个函数经常被用来完成清零工作,由于前者仅适用于Win32平台,推荐使用后者。VOIDZeroMemory(PVOIDdestination,SIZE_Tlenqth);void*memset(void*dest,intc,size_tcount);,.,34,IPv4地址结构in_addr,用于存储32位IPv4地址的数据结构,其定义如下:structin_addrunionstructu_chars_b1,s_b2,s_b3,s_b4;S_un_b;structu_shorts_w1,s_w2;S_un_w;u_longS_addr;S_un;#defines_addrS_un.S_addr#defines_hostS_un.S_un_b.s_b2#defines_netS_un.S_un_b.s_b1#defines_impS_un.S_un_w.s_w2#defines_impnoS_un.S_un_b.s_b4#defines_lhS_un.S_un_b.s_b3;,.,35,IPv4地址结构in_addr,有三种赋值接口:S_addr,S_un_b,S_un_w。最常用的赋值接口是S_addr和S_un_b。S_addr:32位的无符号整数,对应32位IPv4地址。要将地址202.119.9.199赋给in_addr结构,可以使用如下代码:in_addraddr;addr.S_un.S_addr=inet_addr(“202.119.9.199”);其中,inet_addr函数用于转换点串IP地址。上面代码可简写为:in_addraddr;addr.s_addr=inet_addr(“202.119.9.199”);,.,36,IPv4地址结构in_addr,假设主机上有多块以太网卡,每块网卡都配有IP地址,并且不关心应用程序具体使用哪个接口,那么在给addr.s_addr赋值时可用常量INADDR_ANY。它在winsock2.h中被定义为(u_long)0X00000000,即本地的任意以太网接口IP地址。代码如下:in_addraddr;addr.s_addr=INADDR_ANY;,.,37,IPv4地址结构in_addr,S_un_b:包含4个8位无符号整数,组合起来表示IPv4地址:s_b1.s_b2.s_b3.s_b4。例子In_addraddr;addr.S_un.S_un_b.s_b1=202;addr.S_un.S_un_b.s_b2=119;addr.S_un.S_un_b.s_b3=9;addr.S_un.S_un_b.s_b4=199;,.,38,通用地址结构sockaddr,structsockaddru_shortsa_family;/addressfamily/charsa_data14;/upto14bytesofprotocoladdress;在最初设计套接口函数接口时,面临着这样的选择:是专门开发一套为TCP/IP协议所用的API,还是提供一种通用的编程接口以服务于多种网络协议。两者之间的差别非常明显如果采用前者,那么提供的函数接口就会相对简单,对于后者,程序员在使用时必须提供足够的信息(参数)来告诉接口自己所采用的协议族。,.,39,通用地址结构sockaddr,以connect函数为例(该函数一般用于主动建立TCP连接):intconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen);为了使其适用于不同的网络协议环境,它的第二个参数并不是structsockaddr_in*,而是structsockaddr*。在使用涉及到这种地址结构的函数接口时,必须强制将structsockaddr_in指针转化为structsockaddr指针。,.,40,地址操作函数,1函数inet_addr()将包含点分格式的IPv4地址字符串转化为in_addr地址结构适用的32位整数。其定义如下:unsignedlonginet_addr(constcharFAR*cp);参数:cp,点分IPv4字符串。如果没有错误发生,函数返回32位的地址信息。如果cp字符串包含的不是合法的IP地址,那么函数返回INADDR_NONE。,.,41,地址操作函数,2函数inet_ntoa()将一个in_addr地址值转化为标准的点分IP地址字符串。定义如下:charFAR*inet_ntoa(structin_addrin);in:IPv4地址结构。返回值:如果没有错误发生,函数inet_ntoa返回一指向包含点分IP地址的静态存储区字符指针;否则返回NULL。注释:保存在该指针指向的存储区中的信息仅确保在下一次Winsock调用之前有效,因此应该及时加以复制。,.,42,地址操作函数,3.gethostbyname()完成的是域名解析功能。函数定义如下:structhostentFAR*gethostbyname(constcharFAR*name);name:待解析的域名字符串,如。返回值:如果没有错误发生,函数返回包含域名地址信息的HOSTENT结构数据,在HOSTENT结构中有一个h_addr_list域,它是一个NULL结尾的IP地址列表。有错误时,返回空指针。,.,43,不同的主机对字节值的存储顺序不同小序在前(Little-endian)在起始地址处存放整数的低序号字节大序在前(Big-endian)在起始地址处存放整数的高序号字节。计算机究竟采用那种字节存储顺序由各自的设计决定Windows系列的操作系统使用的是小序在前的存储方式SunOS和Solaris等采用的大序在前的存储方式。,网络字节顺序,.,44,编程举例,SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);charrecvBuf100;chartempBuf100;sprintf(tempBuf,%ssay:%s,inet_ntoa(addrSrv.sin_addr),recvBuf);/将sin_addr储存的IP(127.0.0.1)转换成字符串形式。,.,45,主机字节序计算机各自的“主机字节”(Host-byte)来表示的。网络字节序统一为:“大序在前”需要注意字节序的地方16位整数32位整数,.,46,在Winsock中,有一系列的函数可用于多字节数的转换,把它们从主机字节顺序转换成网络字节顺序,反之亦然。下面4个API函数便将一个数从主机字节顺序转换成网络字节顺序:htonl():参数是主机字节顺序的一个4字节数,函数返回网络字节顺序的数;htons():参数是主机字节顺序的一个2字节数,函数返回网络字节顺序的数;WSAHtonl():参数是主机字节顺序的一个4字节数,函数返回网络字节顺序的数;WSAHtons():参数是主机字节顺序的一个2字节数,函数返回网络字节顺序的数。,.,47,基本SocketAPI函数,socket(),bind(),connect(),accept(),listen(),getsockname(),getpeername(),gethostbyname(),close()和shutdown(),.,48,socket,头文件Windows下包含的头文件:#includeLinux下包含的头文件:#include函数原型intsocket(intfamily,inttype,intprotocol);,.,49,协议族,socket函数中的family值的常量定义:,.,50,type,.,51,protocol,一般将其设置为0,除非用在原始套接口上。Linux下protocol的常量在头文件中定义,常量名以IPPROTO_开头,如IPPROTO_IGMP。,.,52,bind,函数原型intbind(intsockfd,constsockaddr*myaddr,socklen_taddrlen);功能:bind函数将一个本地的协议地址和套接口联系起来。bind函数的第一个参数为套接口描述符sockfd,它是socket()函数的成功返回值。第二个参数是一个指向与协议有关的地址结构的指针,第三个参数则为地址的长度。,.,5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-河北-河北广播电视天线工四级(中级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-河北-河北农业技术员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-江苏-江苏环境监测工二级(技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西水利机械运行维护工五级(初级工)历年参考题库典型考点含答案解析
- 焊工安全知识培训目的
- 2025年事业单位工勤技能-广西-广西医技工五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东计算机操作员四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东房管员四级(中级工)历年参考题库典型考点含答案解析
- 2020-2025年安全员之A证(企业负责人)通关题库(附答案)
- 2025年事业单位工勤技能-北京-北京计算机文字录入处理员五级(初级工)历年参考题库典型考点含答案解析
- 金融标准化知识培训课件
- 2024年医销售药销售工作总结
- 《电力建设工程施工安全管理导则》(NB∕T 10096-2018)
- 仓库出错货款报告范文
- 银行下半年对公账户新增存款营销活动方案
- 健康管理中心运营与服务流程规范
- GB/T 2820.7-2024往复式内燃机驱动的交流发电机组第7部分:用于技术条件和设计的技术说明
- HG∕T 4281-2011 塑料焊接工艺规程
- 自考08257《舆论学》备考试题库(含答案)
- HG20202-2014 脱脂工程施工及验收规范
- 中学舆情应急处置方案
评论
0/150
提交评论