TCP_IP网络重复型服务器通信软件的设计(四)

文章作者 100test 发表时间 2007:03:10 17:43:51
来源 100Test.Com百考试题网


客户机服务器接收和发送数据的方法

   数据的传送过程
  硬件划分:

├←─── 服务器 ───→┼← 网络 →┼←── 客户机 ──→┤
┌──┐⑥┌──┐⑦┌──┐
┌→┤qid4├→┤ L2 ├→┤qid2├─┐
⑤│ └──┘ └──┘ └──┘ ↓⑧
┌──┐ ┌──┴──┐ ┌──→ ┌──┴──┐ ┌────┐
│ DB ├←→┤s_process │ │ │c_process ├←→┤终端用户│
└──┘ └──┬──┘ └─── └──┬──┘ └────┘
④↑ ┌──┐ ┌──┐ ┌──┐ │①
└─┤qid3├←┤ L1 ├←┤qid1├←┘
软件划分: └──┘③└──┘②└──┘
├←─ s_process ──→┼←tcp_s→┼←tcp_c→┼← c_process →┤


图2 数据在客户机服务器之间传递的全过程
  其中s_process和c_process是分别运行在服务器上的服务器业务程序和运行在客户机上的客户业务进程。qid3,qid4和qid1,qid2是分别存在于服务器及客户机上的消息队列。
  tcp_s和tcp_c是分别运行在服务器和客户机上的通信软件。在客户机和服务器之间建立的两条连接是L1和L2,其中L1专用于客户机至服务器,L2专用于服务器至客户机。
  下面叙述图2中所示的数据传递过程,同时介绍用于数据接收和发送的四个函数。因为业务程序不知何时可以接收或发送消息,所以这四个函数都存在一个循环不断地试图接收或发送数据。表示消息的数据结构是sg_buf,消息由消息类别mtype及正文段mdata组成。
  正文段中存放的数据是无结构的,必须定义一种数据结构(struct),用结构中的各变量对mdata进行划分,从而使mdata中的数据可以被理解和使用。还可将mdata前面的一部分区域划出来重新命名用作其他用途。消息在整个数据传递的过程中起类似“载体”的作用。 来源:www.examda.com

#define MSGSIZE 200
struct msg_buf{
long mtype. /* 消息类别 */
long cpid. /* 客户业务进程标识号 */
long sid. /* 共享内存记录编号 */
long msgid. /* 消息编号 */
char mdata[MSGSIZE-16]. /* 数据区 */
}

  ① 客户业务程序c_process从终端用户接收数据,先存放在一个结构中,然后将该结构的内容依照一定的格式拷入buf->mdata中,然后将buf以消息的形式放入消息队列qid1中。

pidc=getpid()./* c_process的进程号 */
buf->mtype=1. /* 消息类别都为1 */
buf->sid=0. /* sid在客户机没用 */
buf->msgid= msgid.
buf->cpid=pidc.
msgsnd(qid1,buf,MSGSIZE,0).

  ② 进程tcp_c调用函数Client_Send从qid1中取得消息,然后往L1写给服务器。从qid1中取消息时对消息并不予于区别,凡在qid1中的消息都要由进程tcp_c来发送。

for(..){ /* 取mtype=1的消息 */
msgrcv(qid1,buf,MSGSIZE,1,0).
write(s_w,buf,i 1).
}

相关文章


C语言初学者的困惑--如何由dos向windows转变
TCP_IP网络重复型服务器通信软件的设计(四)
TCP_IP网络重复型服务器通信软件的设计(五)
TCP_IP网络重复型服务器通信软件的设计(二)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛