CH1网络编程基础.ppt
《CH1网络编程基础.ppt》由会员分享,可在线阅读,更多相关《CH1网络编程基础.ppt(167页珍藏版)》请在三一办公上搜索。
1、,TCP/IP与网络编程,授课教师 李平勇成都大学信息科学与技术学院,第1章 网络编程基础,网络操作系统(Network Operating System,NOS)网络操作系统是使网络上的计算机能方便而有效地共享网络资源,为网络用户提供所需的各种服务软件和有关规程的集合。它除了具有一般桌面操作系统的全部功能外,还应该满足用户使用网络的需要,尤其要提供数据在网上的安全传输,管理网络中的共享资源,实现用户通信以及方便用户使用网络。网络操作系统是作为网络用户与网络系统之间的接口。网络操作系统的任务有两项:(1)常规任务,主要负责文件管理、存储管理、进程管理、任务管理、I/O管理、CPU调度等;(2)
2、网络任务,主要功能为资源共享(文件、设备、数据)、安全管理、远程过程调用、网络I/O等。,1.1 网络操作系统,网络操作系统,目前主流的四种主要网络操作系统是:UNIX或Linux。其中,UNIX操作系统主要有SUN公司的Solaris,IBM公司的AIX等。Linux操作系统主要有Redhat,红旗Linux等。Windows操作系统:Microsoft公司的Windows系列,如Microsoft的NT 或Windows 2003 Advanced Server等。Novell公司的Novell网(NetWare)Santa Cruz Operation公司(SCO)的UnixWare,U
3、NIX,UNIX是一个多用户、多任务的分时操作系统,在计算机网络尤其是Internet的发展中发挥了极其重要的作用。在Internet中提供服务的各类节点计算机中,90%以上都使用UNIX或类UNIX操作系统。,UNIX系统结构图,UNIX,UNIX系统主要由以下4个部分组成:内核。是组成操作系统的核心,它控制任务的调度运行,管理计算机存储器,维护文件系统,并在用户中分配计算机资源。它对用户是透明的。外壳(Shell)。Shell是一个程序(类似于DOS中的COMMAND.COM),它解释用户所提交的命令并把该命令提交给内核执行,执行结果再返回给用户。Shell也是一种程序设计语言,用户可以使
4、用Shell命令来设计程序(类似于DOS中的batch命令)。文件系统。文件系统是指在用户终端上可为用户所用的全部文件的集合,它使信息的存储和检索更为容易。命令。命令是一组实用程序的名称。UNIX系统提供的命令包括:文本编辑、文件管理、软件开发工具、系统配置、通信等。,UNIX,UNIX中包含3个主要的网络包:TCP/IP 包括TCP、UDP、IP、DNS等标准协议。基本网络实用程序(BNU)提供UUCP、远程登录、远程执行、发送邮件、连接远地终端、串行通信等功能。网络文件系统(Network File System,NFS)实现不同系统间文件和目录的透明访问,这种文件共享方式独立于计算机、操
5、作系统和网络体系结构。,Linux,UNIX系统是一个非常成熟的网络操作系统,但对计算机硬件的要求比较高,对于一般的个人用户来说,想要在PC机上运行UNIX是比较困难的。Linux是按照UNIX风格设计的操作系统,所以在源代码级上兼容绝大部分的UNIX标准。相当多的网络安全人员在自己的机器上运行的正是Linux。,Linux,Linux是一个充满生机的操作系统,具有巨大的用户群和广泛的应用领域,在软件业中有着重要地位,是惟一能与UNIX和Windows较量和抗衡的操作系统。从技术上讲,Linux有如下特点:(1)继承了UNIX的优点,又有了许多更好的改进,其开放、协的开发模式是集体智慧的结晶,
6、能紧跟技术发展潮流,具有极强的生命力;(2)是通用的操作系统,可用于各种PC机和工作站;(3)内置通信联网功能,可让异种机联网;(4)具有开放的源代码,有利于发展各种特色的操作系统;(5)符合POSIX标准,各种UNIX应用可方便地移植到Linux下;(6)提供庞大的管理功能和远程管理功能;(7)支持大量外部设备;(8)支持32种文件系统;(9)提供GUI;(10)支持并行处理和实时处理,能充分发挥硬件性能;(11)在Linux平台上软件开发成本低。,Windows,Microsoft(微软)公司的Windows系统不仅在个人操作系统中占有绝对优势,它在网络操作系统中也具有非常强劲的竞争力。W
7、indows操作系统配置在整个局域网配置中是最常见的,但由于它对服务器的硬件要求较高,且稳定性能不是很高,所以Windows网络操作系统一般只是用在中低档服务器中,高端服务器通常采用UNIX、Linux或Solaris等非Windows操作系统。在局域网中,Windows网络操作系统主要有:Windows NT 4.0 Server、Windows 2000 Server/Advance Server,以及Windows 2003 Server/Advance Server等。工作站系统可以采用任何Windows或非Windows操作系统,包括个人操作系统,如Windows 9x/ME/XP等
8、。,Windows NT系统结构,Windows,Windows NT作为一款成功的网络操作系统,其网络功能强大,采用OSI/RM网络体系结构,在多个层次之间提供接口规范,如NDIS、TDI、Provider Interface、Socket、NETBIOS等,支持TCP/IP、IPX/SPX、NETBEUI等网络协议,如下页图中所示。,Windows NT网络体系结构,Windows API函数,WIN32 API是Microsoft Windows 32位平台的应用程序编程接口。WIN32 API函数是构筑Windows应用框架的基石,在它的下面是Windows的操作系统核心,上面则是所有
9、的Windows应用程序,如下图所示。,Windows API函数,Windows API函数根据功能不同,分为很多种类,具体如下:网络函数消息函数文件处理函数打印函数文本和字体函数菜单函数位图、图标和光栅运算函数绘图函数设备场景函数硬件与系统函数进程和线程函数控件与消息函数,Windows API函数,目前常用的可视化编程环境(如VB、VC+、DELPHI等)中提供了大量的类库和各种控件,它们替代了API的神秘功能,事实上这些类库和控件都是构架在WIN32 API函数基础之上的,是封装了的API函数的集合。它们把常用的API函数组合在一起成为一个控件或类库,并赋予其方便的使用方法,极大地加速
10、了Windows应用程序开发的过程。实际上如果要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数,虽然类库和控件使应用程序的开发简单的多,但它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。,1.2 文件系统,在网络通信中,许多通信方式(如Socket通信、管道通信、邮路通信等)的基本原理都与UNIX/Linux的文件操作相同,所以,了解UNIX/Linux下的文件操作是学习网络通信的基础。,Linux支持多种文件系统,如ext2、ext3、minix、iso9660、fat、vfat、nf
11、s等。在这些具体文件系统的上层,Linux提供了虚拟文件系统(VFS)来隐藏各种文件系统的具体细节,为访问它们提供统一的接口。,1.2 文件系统,文件系统,虚拟文件系统,应用程序,Ext2,设备文件,FAT,NFS,文件编程,Linux中对文件编程可以使用两类函数:Linux系统调用C语言库函数 前者依赖于Linux系统,后者与操作系统是独立的,在任何操作系统下,使用C语言库函数操作文件的方法都是相同的。,系统调用-创建,int creat(const char*filename,mode_t mode)Filename:要创建的文件名(包含路径,缺省为当前路径)Mode:创建模式,系统调用-
12、创建,Mode 含义S_IRUSR 可读S_IWUSR 可写S_IXUSR 可执行S_IRWXU 可读、写、执行S_IRGRP 组可以读S_IWGRP 组可以写S_IXGRP 组可以执行,系统调用-创建,Mode 含义S_IRWXG 组可以读写执行S_IROTH 其他人可以读S_IWOTH 其他人可以写S_IXOTH 其他人可以执行S_IRWXO 其他人可以读、写、执行S_ISUID 设置用户执行IDS_ISGID 设置组的执行ID,系统调用-创建,除了可以通过上述宏进行标志以外,也可以用数字来表示,Linux共用5个数字来表示文件的各种权限:第一位:用户ID;第二位:组ID;第三位:用户自己
13、的权限;第四位:组的权限;第五位:其他人的权限。,系统调用-创建,每个数字可以取1(执行权限)、2(写权限)、4(读权限)、0(无任何权限)或者这些值的和。例:要创建一个用户可读、可写、可执行,但是组没有权限,其他人可以读、可以执行的文件,并设置用户ID位。10705:1(用户ID)、0(不设置组ID)、7(1+2+4,读、写、执行)、0(没有权限)、5(1+4,读、执行),系统调用-创建,实 例,文件描述,在Linux系统中,所有打开的文件都对应一个文件描述符。文件描述符是一个非负整数。当打开一个文件时,内核向进程返回一个文件描述符。文件描述符的范围是0-OPEN_MAX。早期的UNIX版本
14、OPEN_MAX=19,即允许每个进程同时打开20个文件,现在很多系统则将其增加至1024。,系统调用-打开,int open(const char*pathname,int flags)int open(const char*pathname,int flags,mode_t mode)Pathname:要打开的文件名(包含路径,缺省为当前路径)Flags:打开标志,系统调用-打开,Flags 含义O_RDONLY 只读方式打开O_WRONLY 只写方式打开O_RDWR 读写方式打开O_APPEND 追加方式打开O_CREAT 创建一个文件,系统调用-打开,Flags 含义O_NOBLOCK
15、 非阻塞方式打开O_TRUNC 如果文件已经存在,则删除文件的内容O_EXEC 如果使用了O_CREAT,且文件已存在,则报错,系统调用-打开,O_RDONLY、O_WRONLY、O_RDWR三个标志不能同时使用。如果使用了O_CREATE标志,则使用的函数是int open(const char*pathname,int flags,mode_t mode);这时还要指定mode来表示文件的访问权限。,系统调用-打开,实 例,系统调用-关闭,当我们操作完文件以后,需要关闭文件:int close(int fd)Fd:文件描述符,来源?,系统调用-读,int read(int fd,const
16、 void*buf,size_t length)功能:从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。,系统调用-写,int write(int fd,const void*buf,size_t length)功能:把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数。,系统调用-定位,int lseek(int fd,offset_t offset,int whence)功能:将文件读写指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。,系统调用-定位
17、,whence可使用下述值:SEEK_SET:相对文件开头SEEK_CUR:相对文件读写指针的当前位置SEEK_END:相对文件末尾 offset可取负值,例如下述调用可将文件指针相对当前位置向前移动5个字节:lseek(fd,-5,SEEK_CUR),系统调用-定位,如何利用lseek来计算文件长度?,系统调用-定位,由于lseek函数的返回值为文件指针相对于文件头的位置,因此下列调用的返回值就是文件的长度:lseek(fd,0,SEEK_END),系统调用-访问判断,有时侯我们要判断文件是否可以进行某种操作(读,写等),这个时候我们可以使用access函数。int access(const
18、 char*pathname,int mode)Pathname:文件名称Mode:要判断的属性。可以取以下值或者是他们的组合.R_OK文件可读,W_OK文件可写,X_OK文件可执行,F_OK文件存在。返回值:当我们测试成功时,函数返回0,否则如果一个条件不符时,返回-1。,系统调用-访问判断,例:#includeint main()if(access(“/etc/passwd”,R_OK)=0)printf(“/etc/passwd can be read!n”);,系统调用-属性,文件具有各种属性,除了常见的访问权限以外,文件还有创建时间,大小等属性,文件属性使用 Struct Stat
19、结构描述。,系统调用-属性,struct stat dev_t st_dev;/*设备*/ino_t st_ino;/*节点*/mode_t st_mode;/*模式*/nlink_t st_nlink;/*硬连接*/uid_t st_uid;/*用户ID*/gid_t st_gid;/*组ID*/dev_t st_rdev;/*设备类型*/off_t st_off;/*文件字节数*/unsigned long st_blksize;/*块大小*/unsigned long st_blocks;/*块数*/time_t st_atime;/*最后一次访问时间*/time_t st_mtime;
20、/*最后一次修改时间*/time_t st_ctime;/*最后一次改变时间(指属性)*/;,系统调用-属性,使用最多的属性是st_mode,通过属性我们可以判断给定的文件是一个普通文件还是一个目录,连接等等,可以结合下面几个宏来判断。S_ISLNK(st_mode):是否是一个连接S_ISREG(st_mode):是否是一个常规文件S_ISDIR(st_mode):是否是一个目录S_ISCHR(st_mode):是否是一个字符设备.S_ISBLK(st_mode):是否是一个块设备S_ISFIFO(st_mode):是否是一个FIFO文件S_ISSOCK(st_mode):是否是一个SOCK
21、ET文件,系统调用-属性,如果我们要获取文件的属性,我们可以使用函数:int stat(const char*file_name,struct stat*buf)int fstat(int filedes,struct stat*buf)Stat:判断没有打开的文件Fstat:判断打开的文件,系统调用-文件,综 合 实 例,Linux目录文件操作,路径获取,在编写程序的时候,有时候需要得到当前路径。C库函数提供了getcwd来解决这个问题。char*getcwd(char*buffer,size_t size)我们提供一个size大小的buffer,getcwd会把当前的路径名copy 到bu
22、ffer中.如果buffer太小,函数会返回-1。,路径获取,#includemain()char buf80;getcwd(buf,sizeof(buf);printf(“current working directory:%sn”,buf);,创建,#include int mkdir(char*dir,int mode)功能:创建一个新目录。返回值:0表示成功,-1表述出错。,打开,#include#includeDIR*opendir(const char*name)功能:打开参数name指定的目录返回值:成功则返回DIR*型态的目录流,打开失败则返回NULL。,读取,#include
23、#include struct dirent*readdir(DIR*dir)功能:返回参数dir目录流的下个目录进入点,读取,struct dirent ino_t d_ino;ff_t d_off;signed short int d_reclen;unsigned char d_type;har d_name256;d_ino 此目录进入点的inoded_off 目录文件开头至此目录进入点的位移d_reclen _name的长度,不包含NULL字符d_type d_name 所指的文件类型d_name 文件名,读取位置,#includeoff_ttelldir(DIR*dir)功能:返回
24、dir目录流目前的读取位置。,读取位置,#include#include#includemain()DIR*dir;structdirent*ptr;intoffset;dir=opendir(/etc/rc.d);while(ptr=readdir(dir)!=NULL)offset=telldir(dir);printf(d_name:%soffset:%d n,ptr-d_name,offset);closedir(dir);,定位,#includevoid seekdir(DIR*dir,off_t offset)功能:设置参数dir目录流目前的读取位置,在调用readdir()时便从
25、此新位置开始读取。参数offset 代表距离目录文件开头的偏移量。,定位,#include#include#includemain()DIR*dir;structdirent*ptr;int offset,offset_5,i=0;dir=opendir(/etc/rc.d);while(ptr=readdir(dir)!=NULL)offset=telldir(dir);if(+i=5)offset_5=offset;printf(d_name:%soffset:%d n,ptr-d_name,offset);seekdir(dir.offset_5);printf(Readdir agai
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CH1 网络 编程 基础
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5421248.html