tcpip网络重复型服务器通信软件的设计

tcpip网络重复型服务器通信软件的设计

ID:6739007

大小:48.50 KB

页数:12页

时间:2018-01-24

tcpip网络重复型服务器通信软件的设计_第1页
tcpip网络重复型服务器通信软件的设计_第2页
tcpip网络重复型服务器通信软件的设计_第3页
tcpip网络重复型服务器通信软件的设计_第4页
tcpip网络重复型服务器通信软件的设计_第5页
资源描述:

《tcpip网络重复型服务器通信软件的设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、TCP/IP网络重复型服务器通信软件的设计本文介绍一种新型的基于消息队列的重复型服务器通信软件的设计方法,不同于并发型服务器和一般的重复型服务器通信软件,这种新的软件具有生成的子进程数少的优点,并且容易对客户机与服务器的连接进行管理,适用于客户机数量较多和随机数据通信的情况,能够有效地提高服务器的运行效率。并发服务器与重复服务器的区别  一般TCP/IP服务器通信软件都是并发型的,即是由一个守护进程负责监听客户机的连接请求,然后再由守护进程生成一个或多个子进程与客户机具体建立连接以完成通信,其缺点是随着连接的客户机数量的增多,生成的通信子进程数量会越来越多,在客户机数量较多的应

2、用场合势必影响服务器的运行效率。一般的重复服务器指的是服务器在接收客户机的连接请求后即与之建立连接,然后要在处理完与客户机的通信任务后才能再去接收另一客户机的请求连接,其优点是不必生成通信子进程,缺点是客户机在每次通信之前都要与服务器建立连接,开销过大,不能用于随机的数据通信和繁忙的业务处理。  本文提出的新型的重复型服务器不同于一般的重复服务器,它摒弃了上述两类服务器的缺点综合其优点,该服务器通信软件具有一般重复服务器的特征但又能处理客户机的随机访问,在客户机数量多且业务繁忙的应用场合将发挥其优势。重复型服务器通信软件只用三个进程就可完成与所有客户机建立连接,并始终保持这些连

3、接。重复型服务器通信软件与客户机建立连接的方法  基本思路  当第一台客户机向服务器请求连接时,服务器的守护进程与之建立初始连接(L0),客户机利用L0向服务器发送两个端口号,守护进程将客户机的IP地址和端口号登记在共享内存的记录中,然后关闭L0。由守护进程生成的两个通信子进程从共享内存中获得客户机IP地址及端口号后,分别向客户机请求连接,建立一个从客户机读的连接(L1)和一个往客户机写的连接(L2),并将两个连接的套接字的句柄记录在共享内存中。当另一台客户机请求连接时,守护进程不再生成通信子进程,只是将客户机IP地址和端口号同样登记在共享内存中。通信子进程在一个大循环中先查询

4、共享内存中是否有新的记录,如果有则与这一台客户机建立连接,然后轮询所有已建立的连接的读套接字,查看是否有数据可读,有则读取数据,同时标明该数据是从共享内存中的哪条记录上的读套接字中获得的,再由另一个通信子进程根据这个记录的编号从共享内存中获得对应的写套接字,最后将结果数据往该套接字写往客户机。2.2建立连接  ⑴服务器通信软件的初始进程首先建立公用端口上的套接字,并在该套接字上建立监听队列,同时生成一个守护进程(Daemon)tcp_s,然后初始进程就退出运行。守护进程在函数accept处堵塞住直到有客户机的连接请求,一有连接请求即调用server函数处理,然后继续循环等待另一

5、台客户机的请求。因为TCP/IP在连接被拆除后为了避免出现重复连接的现象,一般是将连接放在过时连接表中,连接在拆除后若要避免处于TIME_WAIT状态(过时连接),可调用setsockopt设置套接字的linger延时标志,同时将延时时间设置为0。服务器在/etc/services文件中要登记一个全局公认的公用端口号:tcp_server2000/tcp。structservent*sp;structsockaddr_inpeeraddr_in,myaddr_in;linkf=0;sp=getservbyname("tcp_server","tcp");ls=socket(AF

6、_INET,SOCK_STREAM,0);/*创建监听套接字*/myaddr_in.sin_addr.s_addr=INADDR_ANY;myaddr_in.sin_port=sp->s_port;/*公用端口号*/bind(ls,&myaddr_in,sizeof(structsockaddr_in));listen(ls,5);qid3=msgget(MSGKEY3,0x1ff);/*获得消息队列的标志号*/qid4=msgget(MSGKEY4,0x1ff);signal(SIGCLD,SIG_IGN);/*避免子进程在退出后变为僵死进程*/addrlen=sizeof(

7、structsockaddr_in);lingerlen=sizeof(structlinger);linger.l_onoff=1;linger.l_linger=0;setpgrp();switch(fork()){/*生成Daemon*/case-1:exit(1);case0:/*Daemon*/for(;;){s=accept(ls,&peeraddr_in,&addrlen);setsockopt(s,SOL_SOCKET,SO_LINGER,&linger,lingerlen)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。