TCP/IP网络重复型服务器通信软件的设计

本文介绍一种新型的基于消息队列的重复型服务器通信软件的设计方法,不同于并发型服务器和一般的重复型服务器通信软件,这种新的软件具有生成的子进程数少的优点,并且容易对客户机与服务器的连接进行管理,适用于客户机数量较多和随机数据通信的情况,能够有效地提高服务器的运行效率。

并发服务器与重复服务器的区别

一般TCP/IP服务器通信软件都是并发型的,即是由一个守护进程负责监听客户机的连接请求,然后再由守护进程生成一个或多个子进程与客户机具体建立连接以完成通信,其缺点是随着连接的客户机数量的增多,生成的通信子进程数量会越来越多,在客户机数量较多的应用场合势必影响服务器的运行效率。一般的重复服务器指的是服务器在接收客户机的连接请求后即与之建立连接,然后要在处理完与客户机的通信任务后才能再去接收另一客户机的请求连接,其优点是不必生成通信子进程,缺点是客户机在每次通信之前都要与服务器建立连接,开销过大,不能用于随机的数据通信和繁忙的业务处理。

本文提出的新型的重复型服务器不同于一般的重复服务器,它摒弃了上述两类服务器的缺点综合其优点,该服务器通信软件具有一般重复服务器的特征但又能处理客户机的随机访问,在客户机数量多且业务繁忙的应用场合将发挥其优势。重复型服务器通信软件只用三个进程就可完成与所有客户机建立连接,并始终保持这些连接。

重复型服务器通信软件与客户机建立连接的方法

基本思路

当第一台客户机向服务器请求连接时,服务器的守护进程与之建立初始连接(L0),客户机利用L0向服务器发送两个端口号,守护进程将客户机的IP地址和端口号登记在共享内存的记录中,然后关闭L0。由守护进程生成的两个通信子进程从共享内存中获得客户机IP地址及端口号后,分别向客户机请求连接,建立一个从客户机读的连接(L1)和一个往客户机写的连接(L2),并将两个连接的套接字的句柄记录在共享内存中。当另一台客户机请求连接时,守护进程不再生成通信子进程,只是将客户机IP地址和端口号同样登记在共享内存中。通信子进程在一个大循环中先查询共享内存中是否有新的记录,如果有则与这一台客户机建立连接,然后轮询所有已建立的连接的读套接字,查看是否有数据可读,有则读取数据,同时标明该数据是从共享内存中的哪条记录上的读套接字中获得的,再由另一个通信子进程根据这个记录的编号从共享内存中获得对应的写套接字,最后将结果数据往该套接字写往客户机。 2.2 建立连接

⑴ 服务器通信软件的初始进程首先建立公用端口上的套接字,并在该套接字上建立监听队列,同时生成一个守护进程(Daemon)tcp_s,然后初始进程就退出运行。守护进程在函数accept处堵塞住直到有客户机的连接请求,一有连接请求即调用server函数处理,然后继续循环等待另一台客户机的请求。因为TCP/IP在连接被拆除后为了避免出现重复连接的现象,一般是将连接放在过时连接表中,连接在拆除后若要避免处于TIME_WAIT状态(过时连接),可调用setsockopt设置套接字的linger延时标志,同时将延时时间设置为0。服务器在/etc/services文件中要登记一个全局公认的公用端口号:tcp_server 2000/tcp。

suct servent *sp;
suct sockaddr_in peeraddr_in,myaddr_in;
linkf=0;
sp=getservbyname("tcp_server","tcp");
ls=socket(AF_INET,SOCK_STREAM,0); /* 创建监听套接字 */
myaddr_in.sin_addr.s_addr=INADDR_ANY;
myaddr_in.sin_port=sp->s_port; /* 公用端口号 */
bind(ls,&myaddr_in,sizeof(suct sockaddr_in));
listen(ls,5);
qid3=msgget(MSGKEY3,0x1ff); /* 获得消息队列的标志号 */
qid4=msgget(MSGKEY4,0x1ff);
signal(SIGCLD,SIG_IGN); /* 避免子进程在退出后变为僵死进程 */
addrlen=sizeof(suct sockaddr_in);
lingerlen=sizeof(suct linger);
linger.l_onoff=1;
linger.l_linger=0;
setpgrp();
switch(fork()){ /* 生成Daemon */
case -1:exit(1);
case 0: /* Daemon */
for(;;){
s=accept(ls,&peeraddr_in,&addrlen);
setsockopt(s,SOL_SOCKET,SO_LINGER,&linger,lingerlen);
server();
close(s);
}
default:
fprintf(serr,"初始进程退出,由守护进程监听客户机的连接请求.\n");
}

时间: 2024-09-17 04:23:40

TCP/IP网络重复型服务器通信软件的设计的相关文章

单网卡工作站用作TCP/IP网络路由器

我们一般认为,路由器连接在多个网络上,所以它应当对应每个网络有一块网卡和一个IP地址.然而在实际中可能会出现需建立一个内部网以解决Internet的IP地址不够用的情况,而工作站往往在自己的主板上又已集成了一块网卡.如何利用现有的资源设置路由器呢?似乎不好办,然而事实上单网卡工作站也可以配成 TCP/IP网络路由器.在装有Solaris2.x操作系统的SUN工作站上,可以采用下述方法来配置. 一.配置路由器接口 1.创建/etc/hostname.interface文件 对应每个连接的网络均应有

利用“TCP/IP筛选”功能限制服务器的端口

对于个人用户来说,您可以限制所有的端口,因为您根本不必让您的机器对外提供任何服务;而对于对外提供网络服务的服务器,我们需把必须利用的端口(比如WWW端口80.FTP端口21.邮件服务端口25.110等)开放,其他的端口则全部关闭. 这里,对于采用Windows 2000或者Windows XP的用户来说,不需要安装任何其他软件,可以利用"TCP/IP筛选"功能限制服务器的端口.具体设置如下: 1.右键点击"网上邻居",选择"属性",然后双击&qu

多线程TCP/IP网络编程

问题描述 多线程TCP/IP网络编程 编写一个socket通信程序,win32控制台的,可以发送.接收消息和文件.要多线程.C语言的. 客户端和服务端各要有怎样的思路,求指导! 目前思路大致是,服务端,两个子线程,主线程接受连接,一个子线程发送消息,一个子线程接收消息. 客户端,主线程连接,一个子线程发送消息,一个子线程接收消息. 现在有个问题,连接多个客户端后,客户端发送的消息会乱掉,服务器又怎么分辨客户端给特定的客户端发送消息. 还有,怎么传输文件. 解决方案 TCP/IP网络编程TCP/I

对TCP/IP网络协议的深入浅出归纳

前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网络协议有了初步的认识,在这里总结出来,可以梳理一下我对网络协议的理解,加深印象. 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电脑之间进行通讯所共同遵守的规则,就是网络协议. 那么

为ASP安装TCP/IP网络通讯协议

因为ASP通常是配合WEB服务器运行的,而WEB服务器通常也需要安装TCP/IP协议.但TCP/IP协议无法单独运行,因此必须配合网卡使用,但如果你是个人单机用户,而不想购买网卡,又想运行ASP的话,则可能需要"骗骗"计算机才可以.以WINDOWS 95为例 1.安装"拨号配适器",系统会自动安装"Microsoft 网络客户","Network 网络客户","IPX/SPX 协议","NETBE

什么是TCP IP 网络TCP IP协议

什么是TCP.IP协议?概括的说TCP/IP协议是(传输控制协议/网间协议)TCP/IP 协议集确立了 Internet 的技术基础.全称Transmission Control Protocol/Internet Protocol.中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.Internet国际互联网络的基础,由 网络层的IP协议和传输层的TCP协议组成.TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准.协议采用了4层的层

TCP/IP网络的信息安全与防火墙技术

自从INTERNET进入我们的生活,到目前为止,它的影响已几乎可达全世界每个角落,真正从信息意义上形成了世界范围的地球村.我国近十年来的 INTERNET用户数与带宽均以惊人的速度增长,根据CNNIC在2000年7月份的最新统计,中国网民数量已经达到1690万,相比较于同年1月份的 890万,在短短的半年内,网民数量增长了一倍:2000年7月,国内注册的各类域名达到99734个,比同年1月的48695个也增长了一倍.2000 年1月的统计数字表明,我国国际线路的总带宽达到35lMbps,而200

如何使用TCP/IP筛选来保护服务器安全

对于部署在Internet的服务器,安全是必须要考虑的事情.为了降低服务器受攻击的危险,停止不必要的服务或在本地连接的TCP/IP属性中只打开必要的端口. 如图2-127所示,实验环境为Server的IP地址192.168.1.200,运行着Web服务,SMTP服务.POP3服务.FTP服务和DNS服务.Client的IP地址为192.168.1.121.只允许Client计算机访问Server计算机的Web服务.FTP服务和DNS服务.以下演示配置Server计算机的TCP/IP筛选只允许TC

UNIX环境高级编程——TCP/IP网络编程

常用网络信息检索函数 gethostname() getppername() getsockname() gethostbyname() gethostbyaddr() getprotobyname() getprotobynumber() getservbyname() getservbyport() 网络属性设置 头文件: #include <sys/types.h> #include <sys/socket.h> 获取一个套接口选项 int getsockopt(