资源描述:
《用winsock实现进程间通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、用winsock实现进程间通信winsock不止可以用于网络通信,也可以用于进程间的通信。比如说在一台电脑上,服务端和客户端的IP地址相等,再开通一个端口,就可以很方便的进行进程间通信了。服务端需要做的事情是:1、socket初始化2、绑定端口3、监听4、连接请求5、通信-发送信息或者接收信息客户端需要做是的事情:1、初始化socket2、请求连接端口3、进程通信-从端口读取信息,或者向端口发送信息我这里有一个例子,可以详细说明通信的过程和原理,在这里将要有两个进程,process1和process2,其中前者可以作为服务端(其实这个不是很重要,哪个做服务端都可以,端口通信
2、是双向的),process1将向process2发送一个数字,然后process2将返回一个数字,这就是一个简单的通信过程。process1的代码如下所示://process1.c#include#include#include#definePORT2500#definepfprintf#defineMSG_LEN32voidclear_str(char*pc)//清空字符串{if(pc!=NULL)while(*pc)*pc++=' ';}intuint2str(unsignedintui,char*pc)
3、//无符号整数转换成字符串{charc;char*temp=pc;if(pc==NULL)return0;clear_str(pc);while(ui>9){*temp++=ui%10+'0';ui/=10;}*temp=ui+'0';while(temp>pc){c=*temp;*temp=*pc;*pc=c;temp--;pc++;}return1;}intmain(){WORDwVersionRequested;WSADATAwsaData;intret=0,salength=0;unsignedintsd;SOCKETserver,slisten;structsoc
4、kaddr_insaserver,saclient;charmsg[MSG_LEN]="";//WinSock初始化wVersionRequested=MAKEWORD(2,2);//希望使用的WinSockDLL的版本ret=WSAStartup(wVersionRequested,&wsaData);if(ret!=0)return0;//创建Socket,使用TCP协议server=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(server==INVALID_SOCKET){WSACleanup();return0;}pf("s
5、ocket()成功!");//构建本地地址信息saserver.sin_family=AF_INET;//地址家族saserver.sin_port=htons(PORT);//注意转化为网络字节序saserver.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//使用INADDR_ANY指示任意地址//绑定ret=bind(server,(structsockaddr*)&saserver,sizeof(saserver));if(ret==SOCKET_ERROR){closesocket(server);WSACleanup();r
6、eturn0;}pf("bind()成功!");//侦听连接请求ret=listen(server,5);if(ret==SOCKET_ERROR){closesocket(server);WSACleanup();return0;}//关闭套接字pf("等待连接……");salength=sizeof(saclient);//接受客户端的连接请求slisten=accept(server,(structsockaddr*)&saclient,&salength);if(slisten==INVALID_SOCKET)//失败则退出{closesocket(serv
7、er);WSACleanup();return0;}pf("accept()成功!");sd=0;while(1){scanf("%d",&sd);//输入要发送的数字uint2str(sd,msg);ret=send(slisten,msg,sizeof(msg),0);//发送一个数字if(ret==SOCKET_ERROR)break;//发送失败clear_str(msg);ret=recv(slisten,msg,sizeof(msg),0);//接收回复if(ret==0){pf("对方已关闭soc