网络程序设计5-编程语言与套接字概述

上传人:ji****n 文档编号:54781352 上传时间:2018-09-19 格式:PPT 页数:64 大小:663KB
返回 下载 相关 举报
网络程序设计5-编程语言与套接字概述_第1页
第1页 / 共64页
网络程序设计5-编程语言与套接字概述_第2页
第2页 / 共64页
网络程序设计5-编程语言与套接字概述_第3页
第3页 / 共64页
网络程序设计5-编程语言与套接字概述_第4页
第4页 / 共64页
网络程序设计5-编程语言与套接字概述_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《网络程序设计5-编程语言与套接字概述》由会员分享,可在线阅读,更多相关《网络程序设计5-编程语言与套接字概述(64页珍藏版)》请在金锄头文库上搜索。

1、1,网络编程语言和 套接字基础知识概述,网络应用程序模型,2,内容提要,操作系统应用空间编程 可用各种高级语言 C/C+,Java, delphi,VB C语言常见注意事项 文件操作 字符串操作 函数指针应用 程序结构 有关资料和注意事项 常用C语言开发环境 套接字基础知识,3,操作系统的应用空间编程,可以使用常见的高级语言编程 Java:具有良好的可移植性,但需要虚拟机 VB,delphi:使用简单,只用于Windows环境 C/C+:高效,各种操作系统支持的语言 使用C语言作为网络编程语言的优势 具有多种操作系统支持,几乎所有 执行效率高 编程灵活,要求高 可以进行系统内核编程 具有大量开

2、源项目,4,C语言文件操作,fopen和open的区别 fopen是ANSI C的标准,可移植 open更加底层,linux系统,打开设备 fwrite和fread 二进制,记录操作 fgetc,fgets和fputc,fputs 字符和字符串操作 fseek,ftell,feof 如何获取文件大小?,5,读取内容赋值给数据结构变量,数据结构例子 struct student char name12; short age; int weight; struct student *man; man = (struct student *)malloc(sizeof(struct student)

3、;num = fread(man, sizeof(struct student), 1, filestream) ; man-age+; . fwrite(man, sizeof(struct student), 1, filestream);,6,字符串函数,char *p, str100; 数组名str是恒定的指针,p是指针变量; sprintf (fprintf, printf) 将多个变量格式化输出到一个字符串中。(输出到文件中,输出到屏幕中) memset(str, 0, 100):置初值为0; memcpy,strcpy:拷贝内存或者字符串; memcmp,strcmp:内存比较或

4、者字符串比较; 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,如何表示链表,struc

5、t student char name12; short age; int weight; struct student *next; ; struct student *head, *last,*tmp; for(i=0;inext = tmp; last=tmp; ,9,函数指针的应用,函数名可以作为一个函数的指针 可以定义一个指针变量来保存函数名 例子 结构定义: struct net_proto_family int family;int (*create)(struct net *net, struct socket *sock,int protocol, int kern);str

6、uct module *owner; inet; 函数定义:int create_TCP(struct net *net, struct socket *sock, int protocol, int kern) 赋值:inet.create = create_TCP; 使用: int ret = inet.create(pnet, psock, tcp,kern);,10,C语言程序构成,头文件 宏定义固定值用有意义的名字表示 数据结构定义,类定义 函数定义和全局外部变量定义 C文件 包含头文件 定义变量 函数实现 分类,有序 缩进规范,注释,空格,11,C开发环境,linux gcc+gd

7、b makefile的编写 Windows VC+6.0 VS系列 C+BUILDER Qt,Eclipse C+ ACE,12,文本界面和图形用户界面,文本界面 所有输入是getc,getch,gets之类 所有输出用printf 不美观,命令行,适用控制台程序,服务器 图形用户界面 Qt,VC,VS 需要理解C+ 理解windows消息机制 实用于客户端程序,13,C+, VC+, MFC,C+是C语言的超集,增加了面向对象的特色;适合开发大型软件; VC+使用了MS对C+的扩展,是可视化的C+开发环境; MFC是MS基础类库,以C+类的形式封装了Windows API,并且包含一个应用程

8、序框架,以减少应用程序开发人员的工作量 具体内容参见有关资料课件;,14,网络应用程序基础知识,什么是套接字 网络通信标准 网络应用程序的模型 C/S P2P 混合模式 网络地址及其他问题 套接字的实现简述,15,什么是套接字,TCP/IP协议存在于OS中,网络服务通过OS提供 在OS中增加支持TCP/IP的系统调用Berkeley套接字 如socket,connect,send,recv等 socket是1981提出于BSD4.1 UNIX,16,什么是套接字,1. 套接字是一个主机本地应用程序所创建的, 为操作系统所控制的接口 (“门”) . 2. 应用进程通过这个接口,使用传输层提供的服

9、务, 跨网络发送(/接收)消息到(/从)其他应用进程。 3.Client/server模式的通信接口套接字接口.,17,套接字API,来自UNIX系统,目前在linux,windows皆实现。 Berkeley套接字ARPA要求伯克利分校将TCP/IP移植到UNIX中需要创建一个接口,便于应用程序使用这个接口 进行网络通信尽可能使用现有的系统调用,同时添加新的系统调用支持TCP/IP。 这个系统被称为BSD UNIX 套接字,成为事实上的标准,18,Winsock,伯克利套接口在Windows 平台上的移植版本称为Winsock。 它不仅包含BSD socket的大部分函数 还包含一组针对Wi

10、ndows 系统的扩展库函数 通常以字母WSA 打头 编程人员能充分利用windows 的消息机制以及Win32 平台下的高性能I/O模型。 不同的TCP/IP 协议栈供应商需要提供自己的Winsock 接口实现的动态链接库 标准winsock库,如WS2_32.dll 等,2:应用层,19,什么是网络应用程序,网络应用程序: 能够运行在不同的端系统并通过网络彼此通信的程序 例如Web:Web服务器软件和浏览器软件通信 实现应用层协议,没有应用程序软件运行在网络核心设备上 网络核心设备不在应用层起作用 这种设计方法促进了应用程序的研发,2:应用层,20,一些网络应用,电子邮件 Web 即时讯息

11、 远程登陆 P2P文件共享 在两台计算机之间的两个帐户之间的文件传输,多用户网络游戏 流式存储视频片段 因特网电话 实时视频会议,2:应用层,21,网络应用程序模型(体系结构),客户机/服务器体系结构 P2P体系结构 客户机/服务器和P2P混合的体系结构,2:应用层,22,客户机/服务器体系结构,服务器: 总是打开的主机 具有固定的、众所周知的IP地址 主机群集常被用于创建强大的虚拟服务器 客户机: 同服务器端通信 可以间断的同服务器连接 可以拥有动态IP地址 客户机相互之间不直接通信,2:应用层,23,纯P2P体系结构,没有总是打开的服务器 任意一对主机直接相互通信 对等方间歇连接并且可以改

12、变IP地址 例如:Gnutella,emule 优点:自扩展性 缺点:难以管理,2:应用层,24,客户机/服务器和P2P混合,emule 文件直接在对等方之间交换 文件搜索通过服务器 中心服务器记录对等方内容 对等方查询中心服务器来决定要求的文件位置 即时讯息 两个聊天用户之间是P2P 注册、查询通过服务器 用户上线时要在中心服务器上进行注册 用户与中心服务器联系以找出在线伙伴,2:应用层,25,进程通信,进程:运行在端系统中的程序同一主机上的两个进程通过内部进程通信机制进行通信 不同主机上的进程通过交换报文相互通信,客户机进程:发起通信的进程 服务器进程: 等待联系的进程,注意:具有P2P体

13、系结构的应用程序有客户机进程和服务器进程。,2:应用层,26,进程与计算机网络的接口-套接字,进程通过它的套接字在网络上发送和接收报文 套接字类比于门户 发送进程把报文推出门户 发送进程假定门户到另外一侧之间有运输设施,该设施可以传送报文到接收进程,套接字又叫做应用程序编程接口API 用户通过API对传输层的控制仅限于:(1) 选择传输协议; (2) 能设定几个参数,2:应用层,27,网络进程寻址,为了一个进程能接收报文,它需要一个标识 主机有唯一的32位IP地址 问:主机的IP地址足够标识进程吗? 答:不能。因为一台主机上能够运行许多进程。,主机上的进程标识包括IP地址和端口号 常用应用程序

14、的端口号: 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 :原始套接口,可以读写ICM

15、P 、IGMP 报文;从IP 头起构造自己的报文;接受发向本机的但TCP/IP栈不能够处理的IP包。,30,地址表示与地址操作函数,sockaddr_in INET 协议族地址结构 in_addr IPv4地址结构 sockaddr 通用地址结构 地址操作函数,31,INET 协议族地址结构 sockaddr_in,地址结构名中的最后两个字母“in”,是Internet 的简写,说明该结构仅适用于采用TCP/IP协议的网络。 结构定义如下:struct sockaddr _ in short sin_family; /地址族u_short sin_port; /端口号struct in_add

16、r sin_addr ; /IP地址char sin_zero 8 ; ;,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,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号