文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C/C++TCP/IP网络重复型服务器通信软件的设计
精品推荐
特别推荐
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
·VC++动态链接库编程之MFC扩展 DLL
·TCP/IP网络重复型服务器通信软件的设计
·DirectX游戏开发入门
·经典与现代的结合:在MFC中集成RAD .NET框架
·Windows API-GDI入门基础知识详解(2)
·Visual C++ 入门精解
·C#基础概念二十五问
·用C#实现pdf文件的完整性验证
·成为嵌入式程序员应知道的0x10个问题
·TCP/IP编程实现远程文件传输
·几个C#编程的小技巧
热点TOP10
·学生成绩管理系统实习
·C#编写的windows计算器-源代码
·socket编程原理
·飞机订票系统设计
·C/C++笔试、面试题目大汇总
·TCP/IP编程实现远程文件传输
·C语言图形函数
·Visual C++ 实现数字化图像的分割
·改编 的 C版 职工管理系统
·C#基础概念二十五问
·C语言的常用库函数使用方法分析及用途
·C#源码读取excel数据到程序中-SQL SERVER-到dataset中
·用C语言实现Ping程序功能
·C# GridView 排序及分页
·进程调度模拟程序
·Windows下C语言网络编程快速入门
·通讯录的源代码(用链表实现)
·DirectX游戏开发入门
·在Visual Studio.NET中使用Crystal Report(上)
·asp.net中调用javascript函数实现多功能日期控件示例

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

日期:2007年6月24日 作者: 查看:[大字体 中字体 小字体]


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

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

  一般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。

struct servent *sp;
struct 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(struct sockaddr_in));
listen(ls,5);
qid3=msgget(MSGKEY3,0x1ff); /* 获得消息队列的标志号 */
qid4=msgget(MSGKEY4,0x1ff);
signal(SIGCLD,SIG_IGN); /* 避免子进程在退出后变为僵死进程 */
addrlen=sizeof(struct sockaddr_in);
lingerlen=sizeof(struct 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(stderr,"初始进程退出,由守护进程监听客户机的连接请求.\n");
}

  ⑵ 客户机以这样的形式运行通信程序tcp_c:tcp_c rhostname,rhostname为客户机所要连接的服务器主机名。客户机上的/etc/services文件中也要登记:tcp_server 2000/tcp,公用端口号2000要与服务器一样。

int qid1,qid2,s_c1,s_c2,cport1,cport2;
struct servent *sp;

[1] [2] [3] [4] [5] [6] [7] 下一页 




上一篇:C++设计模式之Singleton

下一篇:打开C++ Builder菜单设计器

TCP/IP网络重复型服务器通信软件的设计 相关文章:
·vista分区软件
·3DS Max 7卧室效果图设计:建模篇
·VB+Access设计图书管理系统
·如何建立一个网站?规划、设计、目的、原则、宣传
·网络玄幻小说十大网站
·EasyRecovery 604硬盘数据恢复软件技巧
·图文详解 Windows 2003服务器集群安装
·Dell PowerEdge 2950 服务器 Windows 2003安装手册
·国内大学校园网网络建设方案参考
·自己电脑做smtp服务器不求人
TCP/IP网络重复型服务器通信软件的设计 相关软件:
·网络常见问题与故障1000例
·美工设计教程
·Dreamweaver 网页设计
·诺顿杀毒软件+诺顿防火墙免费破解版 免注册永远自动升级
·手机SIM卡备份一卡多号(手机魔卡)万能读写软件V9.0
·C语言程序设计
·Photoshop CS中文版平面设计师标准案例教程
·诺顿杀毒软件+诺顿防火墙免费破解版 免注册
·瑞星杀毒软件2008下载版(完全免费)V20.36.32
·Photoshop CS经典创意设计200例

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot