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

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


⑷ tcp_c用listen(s_c1,5)在套接字s_c1上建立客户机的第一个监听队列,等待服务器的连接请求。在与服务器建立第一个连接后,再用listen(s_c2,5)建立第二个监听队列,与服务器建立第二个连接。
listen(s_c1,5).
s_w=accept(s_c1,&.peeraddr_in,&.addrlen).
close(s_c1). /*只允许接收一次连接请求*/
linger.l_onoff=1.linger.l_linger=0.
setsockopt(s_w,SOL_SOCKET,SO_LINGER,&.linger,sizeof(struct linger)).
listen(s_c2,5).
s_r=accept(s_c2,&.peeraddr_in,&.addrlen).
close(s_c2).
setsockopt(s_r,SOL_SOCKET,SO_LINGER,&.linger,sizeof(struct linger)). 来源:www.examda.com

  ⑸ 进程tcp_s1调用函数Server_Receive在一个循环中不断查询是否又有新的客户机登记在共享内存中,方法是判断共享内存中最后一条记录的linkf1标志是否为0,如果为0就调函数connect_to_client与客户机建立第一个连接,然后轮询所有的读套接字,有数据则读,没有数据则读下一个读套接字。

Server_Receive(){
int s1,len,i,linkn,linkf1,n.
struct msg_buf *buf,mbuf.
buf=&.mbuf.
for(..){
linkn=shm_info(0,GETLINKN).
linkf1=shm_info(linkn,GETLINKF1).
if(linkf1==0){
if((i=connect_to_client(linkn,1))<0){
shm_logout(linkn).continue.
}
}
for(n=1.n<=linkn.n ){
s1=shm_info(n,GETS1).
i=read(s1,buf,MSGSIZE).
if(i==0){
fprintf(stderr,"A client exit!\n").
shutdown(s1,1).close(s1).
shm_logout(n).
linkn--.continue.
}
if(i==-1) continue.
buf->mtype=MSGTYPE.buf->sid=n.
len=strlen(buf->mdata).
fprintf(stderr,"mdata=%s\n",buf->mdata).
i=msgsnd(qid3,buf,len BUFCTLSIZE 1,0).
}
}
}

相关文章


TCP_IP网络重复型服务器通信软件的设计(四)
TCP_IP网络重复型服务器通信软件的设计(五)
TCP_IP网络重复型服务器通信软件的设计(二)
TCP_IP网络重复型服务器通信软件的设计(三)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛