【vb精品源码栏目提醒】:网学会员为需要vb精品源码的朋友们搜集整理了【精品】网络编程基础 - 其它资料相关资料,希望对各位网友有所帮助!
第1章 网络编程基础 1.1 网络操作系统 网络操作系统(Network Operating System,NOS)是使网络上的计算机能方便而有效地共享网络资源,为网络用户提供所需的各种服务软件和有关规程的集合。
它除了具有一般桌面操作系统的全部功能外,还应该满足用户使用网络的需要,尤其是提供数据在网上的安全传输,管理网络中的共享资源,实现用户通信以及方便用户使用网络。
网络操作系统作为网络用户与网络系统之间的接口。
网络操作系统的任务有两项:(1)常规任务,主要负责文件管理、存储管理、进程 (2)管理、任务管理、I/O 管理、CPU 调度等; 网络任务,主要功能为资源共享(文件、 、安全管理、远程过程调用、网络 I/O 等。
目前主流的四种网络操作系统是:设备、数据) Windows 操作系统。
Microsoft 公司的 Windows 系 , Windows NT 或 Windows 即 列 如 2000 Advanced Server 等。
UNIX 或 Linux。
其中,UNIX 操作系统主要有 SUN 公司的 Solaris、IBM 公司的 AIX 等,Linux 操作系统主要有 Redhat,红旗 Linux 等。
Novell 公司的 Novell 网(NetWare) 。
Santa Cruz Operation(SCO)公司的 UnixWare。
1.1.1 UNIX UNIX 是一个多用户、多任务的分时操作系统,在计算机网络尤其是 Internet 的发展中发挥了极其重要的作用。
在 Internet 中提供服务的各类节点计算机中,90以上都使用UNIX 或类 UNIX 操作系统。
UNIX 的发展历史如图 1-1 所示。
在 UNIX 操作系统中,一般性的原理介绍主要可以参考 ATT 的 UNIX System V 和 ,而商品化的软件主要有 IBM 公伯克利软件发行(Berkeley Software Distribution,BSD)司的 AIX、Sun Microsystems 公司的 Solaris、惠普 公司的 HP-UX 和 MPD/iX、DEC 公司的 VMS POSIX/DEC UNIX 等。
图 1-1 UNIX 的主要发展历程 UNIX 系统主要由以下 4 个部分组成: 内核。
是组成操作系统的核心,它控制任务的调度运行,管理计算机存储器,维 护文件系统,并在用户中分配计算机资源。
它对用户是透明的。
外壳(Shell) 。
Shell 是一个程序(类似于 DOS 中的 COMMAND.COM) ,它解释 用户所提交的命令并把该命令提交给内核执行,执行结果再返回给用户。
Shell 也是一种程序设计语言,用户可以使用 Shell 命令来设计程序(类似于 DOS 中的 令 。
batch 命 ) 文件系统。
文件系统是指在用户终端上可为用户所用的全部文件的集合,它使信 息的存储和检索更为容易。
命令。
命令是一组实用程序的名 称。
UNIX 系统提供的命令包括: 文本编辑、 文件管理、 软件开发工 具、系统配置、通信等。
UNIX 中包含 3 个主要的网络包: TCP/IP 包括 TCP、UDP、IP、 DNS 等标准协议。
基本网络实用程序(BNU) 提供 UUCP、远程登录、远程执行、发 送邮件、 连接远地终端、串行通信 等功能。
网 络 文 件 系 统 ( Network File System,NFS) 实现不同系统间 文件和目录的透明访问, 这种文件 共享方式独立于计算机、 操作系统 和网络体系结构。
图 1-2 UNIX 体系结构 UNIX 系统结构如图 1-2 所示。
1.1.2 Linux UNIX 系统是一个非常成熟的网络操作系统,但对计算机硬件的要求比较高,对于一般的个人用户来说,想要在 PC 机上运行 UNIX 是比较困难的。
Linux 是按照 UNIX 风格 网络编程技术及应用4 设计的操作系统,所以在源代码级上兼容绝大部分的 UNIX 标准。
相当多的网络安全人 员在自己的机器上运行的正是 Linux。
Linux 是一个充满生机的操作系统,具有巨大的用户群和广泛的应用领域,在软件 业中有着重要地位,是惟一能与 UNIX 和 Windows 较量和抗衡的操作系统。
从技术上讲, Linux 有如下特点:(1)继承了 UNIX 的优点,又有了许多更好的改进,其开放、协作 的开发模式是集体智慧的结晶,能紧跟技术发展潮流,具有极强的生命力; (2)是通 用的操作系统,可用于各种 PC 机和工作站;(3) 内置通信联网功能,可让异种机联网; (4) 具有开放的源代码,有利于发展各种特色的操作系统; (5)符合 POSIX 标准,各种 UNIX 应用可方便地移植到 Linux 下; (6)提供庞大的管理功能和远程管理功能; (7)支 持大量外部设备;(8)支持 32 种文件系统; (9)提供 GUI;(10)支持并行处理和实时 处理,能充分发挥硬件性能; 在 (11) Linux 平台上软件开发成本低。
1.1.3 Windows NT Microsoft(微软)公司的 Windows 系统不仅在个人操作系统中占有绝对优势,它在 网络操作系统中也具有非常强劲的竞争力。
Windows 操作系统配置在整个局域网配置中 是最常见的,但由于它对服务器的硬件要求较高,且稳定性能不是很高,所以 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 等。
在整个 Windows 网络操作系统中最为成功的要算 Windows NT 4.0,它几乎成为中、 小型企业局域网的标准操作系统,一则是它继承了 Windows 家族统一的界面,使用户学 习、使用起来更加容易;再则它的功能也的确比较强大,基本上能满足所有中、小型企 业的各项网络要求。
虽然相比 Windows 2000/2003 Server 系统来说在功能上要逊色许多, 但它对服务器的硬件配置要求要低许多,可以更大程度上满足许多中、小企业的 PC 服 务器配置需求。
Windows NT 基于域(Domain)和工作组(Workgroup)对用户进行管理,如图 1-3 所示。
Windows NT 系统结构如图 1-4 所示。
图 1-3 Windows NT 中的用户、用户组和域的关系 图 1-4 Windows NT 系统结构 Windows NT 作为一款成功的网络操作系统,其网络功能强大,采用 OSI/RM 网络体系结构,在多个层次之间提供接口规范,如 NDIS、TDI、Provider Interface、Socket、NETBIOS 等,支持 TCP/IP、IPX/SPX、NETBEUI 等网络协议,如图 1-5 所示。
图 1-5 Windows NT 网络体系结构Windows API 函数 Win32 API 是 Microsoft Windows 32 位平台的应用程序编程接口。
Win32 API 函数是 网络编程技术及应用6 构筑 Windows 应用框架的基石,在它的下面是 Windows 的操作系统核心,上面则是所 有的 Windows 应用程序,如图 1-6 所示。
图 1-6 Win32 API 应用架构 Windows API 函数分为窗口函数、绘图函数、位图与图标函数、文本与字体函数、 设备描述表函数、菜单函数、文件处理函数、Windows 消息函数、硬件与系统服务函数、 打印函数、网络函数、进程与线程函数。
直接使用这些函数是比较复杂的。
目前常用的可视化编程环境(如
VB、VC、Delphi 等)提供了大量的类库和各种 控件,它们替代了 API 的神秘功能,事实上这些类库和控件都是构架在 Win32 API 函数 基础之上的,是封装了的 API 函数的集合。
它们把常用的 API 函数组合在一起成为一个 控件或类库,并赋予其方便的调用方法,极大地加速了 Windows 应用程序开发的过程。
1.1.4 NetWare Novell 网是美国 Novell 公司开发的局域网网络产品,它的 NetWare 网络操作系统曾 经是世界上最为广泛、最为流行的局域网操作系统。
NetWare 是基于服务器的网络系统, 网络中必须要有一台专用服务器。
NetWare 操作系统分为四个基本部分:NetWare 加载 程序、内核、NetWare 可安装模块环境和应用程序。
NetWare 主要向网络环境客户提供 文件服务,目前在我国的银行、证券等行业中使用。
NetWare 网络的体系结构如图 1-7 所示。
NCP:NetWare 核心协议(NetWare Core Protocol) IPX:网间分组交换协议(Internet Packet eXchange)——相当于 TCP/IP 协议中的 IP SPX:顺序分组交换协议(Sequenced Packet eXchange)——相当于 TCP/IP 协议中的 TCP 图 1-7 NetWare 网络体系结构 1.2 文 件 系 统 在网络通信中,许多通信方式(如 Socket 通信、管道通信、邮路通信等)的基本原理都与 UNIX/Linux 的文件操作相同,所以,了解 UNIX/Linux 下的文件操作是学习网络通信的基础。
本节介绍 Linux 下的文件操作,主要内容包括: 文件的创建和读写 文件属性 目录文件的操作 管道文件1.2.1 Linux 文件操作 1.文件的打开和关闭 当需要打开一个文件进行读写操作的时候,可以使用系统调用函数 open。
文件 使用完以后调用另外一个函数 close 进行关闭操作。
int openconst char pathname int flags int openconst char pathname int flags mode_t mode int closeint fd open 函数有以上两个形式。
其中 pathname 是要打开的文件名(包含路径名称,默认在当前路径下)。
flags 用于指定文件打开方式,可以取下面的一个值或者是几个值的组合。
O_RDONLY:以只读的方式打开文件。
O_WRONLY:以只写的方式打开文件。
O_RDWR:以读写的方式打开文件。
O_APPEND:以追加的方式打开文件。
O_CREAT:创建一个文件。
O_EXEC:如果使用了 O_CREAT 而且文件已经存在,就会发生一个错误。
O_NOBLOCK:以非阻塞的方式打开一个文件。
O_TRUNC:如果文件已经存在,则删除文件的内容。
在上面的标志中,前面三个标志只能使用任意的一个。
如果使用了 O_CREATE 标志,那么就要使用 open 的第二种形式,即还要指定 mode,用来表示文件的访问权限。
mode 可以是以下情况的组合。
----------------------------------------------------------------- S_IRUSR 用户可以读 S_IWUSR 用户可以写 S_IXUSR 用户可以执行 S_IRWXU 用户可以读、写、执行 ----------------------------------------------------------------- 网络编程技术及应用8 S_IRGRP 组可以读 S_IWGRP 组可以写 S_IXGRP 组可以执行 S_IRWXG 组可以读写执行 ----------------------------------------------------------------- S_IROTH 其他人可以读 S_IWOTH 其他人可以写 S_IXOTH 其他人可以执行 S_IRWXO 其他人可以读写执行 ----------------------------------------------------------------- S_ISUID 设置用户执行ID S_ISGID 设置组的执行ID ----------------------------------------------------------------- 也可以用数字来代表各个位的标志。
Linux 共用 5 个数字来表示文件的各种权限: 第一位表示设置用户 ID,第二位表示设置组 ID,第三位表示用户自己的权限位,第四 位表示组的权限,最后一位表示其他人的权限。
每个数字可以取 1(执行权限)、2(写 权限)、4(读权限)、0(无任何权限),或者是这几个值的和。
例如,如果要创建一个用户可以读写执行、组没有权限、其他人可以读执行的文件, 则设置用户 ID 位可以使用的模式是:1(设置用户 ID)、0(组没有设置)、7(124)、 0(没有权限,使用默认)、5(14),即 10705,相应的函数形式为: opentemp O_CREAT 10705 如果打开文件成功,open 会返回一个文件描述符,以后对该文件的所有操作都是根 据这个文件描述符来进行。
当文件操作完成以后,要关闭文件,相应的调用为 close(int fd),其中 fd 是要关闭 的文件描述符。
2.创建新文件 要创建一个新的文件,可以使用 int creatchar pathname int mode 其中,pathname 为文件名,mode 为模式。
如果创建成功,则返回一个文件描述符, 并且该文件已经打开,可以读写,否则返回–1 值。
3.文件的读写 文件打开以后,就可以对文件进行读写了。
可以调用函数 read 和 write 进行文件的 读写。
int readint fd char buffer int count int writeint fd char buffer int count fd 是要进行读写操作的文件描述符,buffer 是要写入文件内容或读出文件内容的内 存地址,count 是要读写的字节数。
对于普通的文件,read 从指定的文件 fd 中读取 count 字节到 buffer 缓冲区中,同时 返回 count。
如果 read 读到了文件的结尾或者被一个信号所中断,返回值会小于 count。
如果是由信号中断引起返回,而且没有返回数据, 且设 read 会返回–1, 置 errno 为 EINTR。
当程序读到了文件结尾的时候,read 会返回 0。
write 将 buffer 中的 count 字节写到文件 fd 中,成功时返回实际所写的字节数。
1.2.2 文件属性 文件具有各种各样的属性,除了文件权限以外,文件还有创建时间、大小等属性。
要判断文件是否可以进行某种操作 , (读、写等)就 可以使用 access 函数。
int accessconst char pathname int mode pathname 是文件名称;mode 是要判断的属性,可以取以下值或者是它们的组合。
R_OK 文件可以读。
W_OK 文件可以写。
X_OK 文件可以执行。
F_OK 文件存在。
当测试成功时,函数返回 0,否则如果有一个条件不符时,返回–1。
如果要获得文件的其他属性,可以使用 stat 或者 fstat 函数。
int statconst char file_name struct stat buf int fstatint filedes struct stat buf 其中,stat 结构的定义为: 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 /最后一次修改时间/ time_t st_ctime /最后一次改变时间指属性/ stat 用来判断没有打开的文件,而 fstat 用来判断打开的文件。
使用最多的属性是st_mode。
通过 该属性可以判断给定的文件是一个普通文件还是一个目录、连接等。
可以使用下面几个宏来判断。
网络编程技术及应用10 S_ISLNKst_mode:是否是一个连接。
S_ISREG:是否是一个常规文件。
S_ISDIR:是否是一个目录。
S_ISCHR:是否是一个字符设备。
S_ISBLK:是否是一个块设备。
S_ISFIFO:是否是一个 FIFO 文件。
S_ISSOCK:是否是一个 Socket 文件。
1.2.3 目录文件操作 在编写程序时,有时要获取当前的工作路径。
库函数提供了 getcwd 来解决这个问题。
C char getcwdchar buffer size_t size 函数提供一个 size 大小的 buffer, 。
如果 buffer getcwd 会把当前的路径复制到 buffer 中 太小,函数会返回–1 和一个错误号。
Linux 提供了大量的目录操作函数,其中比较简单和常用的函数有: int mkdirconst char path mode_t mode DIR opendirconst char path struct dirent readdirDIR dir void rewinddirDIR dir off_t telldirDIR dir void seekdirDIR dir off_t off int closedirDIR dir mkdir 创建一个目录。
opendir 打开一个目录。
readdir 读一个打开的目录。
rewinddir 用来重读目录。
closedir 是关闭一个目录。
telldir 和 seekdir 类似于 ftell 和 fseek 函数。
其 中用到下列目录结构: struct dirent long d_ino off_t d_off unsigned short d_reclen char d_nameNAME_MAX1 /文件名称/ 1.2.4 文件加锁 对一个文件,一个时刻只能进行一个写操作,所以在写的同时,要对文件加锁,防 止别的用户也进行写操作。
Windows 95/98 系统自动对文件加锁,如果使用的是 Windows NT 或 UNIX 的话,就要对文件加锁。
上一篇:
【精品】COM 组件设计与应用(11)—IDispatch 及双接口的调用
下一篇:
[新闻文章]勇者天空文章主页v1_065567news10