如何编写Linux下的客户机/服务器软件

2009-05-13 00:53:04来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


Linux以其源代码公开闻名于世,并以其稳定性和可靠性雄霸操作系统领域,在网络应用技术方面使用得更加广泛。很久以来它就是Windows的重要对手之一。随着网络时代的来临,Linux的这种优势已变得更加突出。本文将论述如何在Linux环境下利用Socket实现客户机/服务器通信。
随着网络技术的发展,网络结构已从过去的主机/终端型、对等型发展到现在广为使用的客户机/服务器型。客户机/服务器模型应用十分广泛,在Internet上WWW,E-mail,FTP等都是基于这种模型的。在面向连接的通信模式下,服务器打开监听端口,监听网络上其它客户机向该服务器发出的连接请求,当收到一个请求信号时与该客户机建立一个连接,之后两者进行交互式的通信。具体步骤可这样组织:

服务器:
1.打开一个已知的监听端口,如smtp为25、pop3为110、ftp为21、telnet为23等。
2.在监听端口上监听客户机的连接请求,如果有客户机请求连接则建立一个连接线路。
3.在连接线路上与客户机通信。
4.通信完毕后关闭连接线路并继续监听客户机的连接请求。

客户机:
1.向指定的服务器主机及端口发出连接请求。
2.当服务器建立连接线路后与服务器进行通信。
3.通信完毕后关闭连接线路。

Linux的许多特性都非常有助于网络程序设计:首先Linux拥有POSIX.1标准库函数,socket()、bind()、listen()这几个库函数可以非常方便地实现服务器/客户机模型,有关这几个库函数的使用说明将在后边介绍。其次Linux的进程管理也非常符合服务器的工作原理,所谓进程就是程序在内存中运行时的状态,可以说进程是动态的程序。在运行着Linux操作系统的计算机中,每一个进程都有一个创建它的父进程,而且它也能创建多个子进程。在服务器端我们可以用父进程去监听客户机的连接请求,当有客户机的连接请求时父进程创建一个子进程去建立连接线路并与客户机通信,而它本身可继续监听其它客户机的连接请求,这样就可避免当有一个客户机与服务器建立连接后服务器就不能再与其它客户机通信的问题。Linux的另一个特性是它秉承了UNIX设备无关性这一优秀特征,即它通过文件描述符实现了统一的设备接口,磁盘、显示终端、音频设备、打印设备甚至网络通信都使用统一的I/O调用。这三个特性将使Linux下的网络程序设计变得易如反掌。
上述三个特性的综合利用将是这篇文章所要讲述的真谛所在。下边的客户机/服务器实现过程可以说明一二,注意与上文所述步骤的不同。

服务器:
1.打开一个已知的监听端口。
2.在监听端口上监听客户机的连接请求,当有一客户机请求连接时建立连接线路并返回通信文件描述符。
4.父进程创建一子进程,父进程关闭通信文件描述符并继续监听端口上的客户机连接请求。
3.子进程通过通信文件描述符与客户机进行通信,通信结束后终止子进程并关闭通信文件描述符。

客户机:
1.向指定的服务器主机及端口发出连接请求,请求成功将返回通信文件描述符。
2.通过通信文件描述符与服务器进行通信。
3.通信完毕后关闭通信文件描述符。


Linux的以下几个库函数是网络程序设计的核心部分,它们分别是:
(1)socket
调用方式:
#include
#include

intsocket(intdomain,inttype,intprotocol);

简要说明:
此函数为通信创建一个端口,正常调用将返回一个文件描述符,错误调用将返回-1。
domain参数有两种选择:AF_UNIX与AF_INET,其中AF_INET为Internet通信协议。
type参数也有两种选择:SOCK_STREAM用于TCP,SOCK_DGRAM用于UDP。
protocol参数通常为0。
可通过下列代码为基于TCP协议的Internet通信建立套接口传输端口:

#include
#include
#include
intsock;

if((sock=socket(AF_INET,SOCK_STREAM,0))==-1)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:RedHat8.0服务器配置方案(DNS)

下一篇:全球信息网服务器(WebServer)