在linux上实现基于socket的多进程实时通信

在linux上实现基于socket的多进程实时通信

ID:28071585

大小:62.00 KB

页数:5页

时间:2018-12-07

在linux上实现基于socket的多进程实时通信_第1页
在linux上实现基于socket的多进程实时通信_第2页
在linux上实现基于socket的多进程实时通信_第3页
在linux上实现基于socket的多进程实时通信_第4页
在linux上实现基于socket的多进程实时通信_第5页
资源描述:

《在linux上实现基于socket的多进程实时通信》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、在Linux上实现基于Socket的多进程实时通信本文提出一个基于Socket的多进程之间通信的实现方法。原理是建立一个进程专门用来做为通信服务器(server)来中转各个进程之间的通信。它首先启动一个用来监视连接要求的listeningSocket,并把它的描述(Descriptor)号加入到一个事先定义好的fd_set的集合巾,这个fd_set的集合用来存放listeningSocket和后來生成的通信Socket的描述号。Server运用systemcallselect来实时检查是否有数ffi到

2、达这个集合屮的任何一个socket,如果有数掘到达listeningSocket,则这一定是客户端发起的连接请求,于是生成一个新的通信Socket与该客户端连接,将生成的Socket描述号加入到fd_set的集合中,将客户端的ID号和与之对应的Socket的描述号记录在ID登记表屮。如果有数据到达某个通信Socket,则这一定是某个客户端发起的通信清求,读出数据并取出收信客户端ID号,在ID登记表中找到与之对应的Socket描述号,将数裾通过对应Socket传送到收信客户端。其他各进程作为客户端(cl

3、ient)。客户端的动作是首先建立通信Socket连接服务器端,然后通过通信Socket进行送信和收信。首先给出Server端的程序,在这里假设有两个客户端要进行实时通信,ClientA向ClientB发送字符1,ClientB向ClientA发送字符2。#include#include#include#include#include#include#include#includeintmain(){intred;structsockaddr一unserver一sockaddr;intbacklog;

4、ushortci;intwatch_fd_li$t[3];fdsetcatchfdset;fd_setwatchset;intnew_cli_fd;intmaxfd;intsocklen,server_len;structsockaddr_uncli_sockaddr;struct{charmodule_id;/*ModuleID*/intclisockfd;/*SocketID*/}cli_info_t[21;for(ci=0;ci<=l;ci++)cli_info_t[ci].cli_sock_f

5、d=-1;for(ci=0;ci<=2;ci++)watch_fd_list[ci]=-l;intserver_sockfd,client_sockfd;server_sockfd=socket(AF.UNIX,SOCK_STREAM,0);$erver_sockaddr.sun_family=AF_UNIX;strcpy(server_sockaddrsun_path,nserver_socketM);server_len=sizeof(server_sockaddr);red=bind(serve

6、r_sockfd,(structsockaddr*)&server_sockaddr,serverjen);backlog=5;red=listen(server_sockfd,backlog);printf(MSERVER::Serveriswaittingonsocket=%d",server_sockfd);watch_fd_list[01=server_sockfd;FD_ZERO(&watchset);FD_SET(server—sockfd,&watchset);maxfd=watch

7、_fd_listLOJ;在上面的程序中,Server生成listeningSocket(server_sockfd),初始化Socket监视集合(watchset),并将listeningSocket放入Socket监视集合中。while(1){charch;intfd;intnread;catchfdset=watchset;red=select(maxfd+1,&catch_fd_set,NULL,NULL,(structtimeval*)0);在上面的程序中,Servei•运用系统调用函数sel

8、ect来实时检査是否有数据到达Socket监视集合中的任何一个socket。if(rcd<0){printf(MSERVER::Server5H);exit⑴;}if(FD_ISSET(server_sockfd,&catch_fd_set)){socklen=sizeof(cli_sockaddr);new_cli_fd=accept(server—sockfd,(structsockaddr*)&(cli_sockaddr),&socklen);

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

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

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