进程间通讯的方法:服务器
Win32Api容许多个进程访问同一个映射对象,获取该映射对象的指针进行操做,这样就实现了不一样进程间数据共享网络
WM_COPYDATA使用很是便利,当一个进程向另外一个进程发送消息时,只须要调用SendMessage或者PostMessage便可,消息使用条件为,须要获取目标进程的主窗口句柄app
实现方法:socket
BEGIN_MESSAGE_MAP(CMainFram*,CFrameWndEx*)函数
ON_WN_COPYDATA()学习
END_MESSAGE_MAP()spa
BOOL OnCopyData(CWnd*,COPYDATASTRUCT*);操作系统
BOOL OnCopyData(CWnd*pWnd,COPYDATASTRUCT*pCopyDataStruct)线程
{指针
return CMainFrame::OnCopyData(pWnd,pCopyDataStruct);
}
HANDLE hHandle = FindWindow(NULL,“**”);
调用SendMessage或者PostMessage发送数据
SendMessage(hHandle,WM_COPYDATA,LPVOID,LPVOID);
3.普通消息
1.建立消息的声明和实现
#define MYMESSAGE USER+100
BEGIN_MESSAGE_MAP(CMainFram*,CFrameWndEx*)
ON_MESSAGE(MYMESSAGE,OnMyMessage)
END_MESSAGE_MAP()
LRESULT OnMyMessage(DWORD,DWORD);
LRESULT OnMyMessage(DWORD,DWORD)
{
Return 0;
}
2.发送方
先查找目标窗口的句柄
#define MYMESSAGE USER+100
HANDLE hHandle = FindWindow(NULL,”**”);
调用SendMessage接口,发送消息
SendMessage(hHandle,MYMESSAGE,DWORD,DWORD);
4.TCP\UDP通信,可实现本地计算机进程间通信也可实现不一样操做系统下进程间通信
服务器端:可配合线程及线程池一块儿使用,目的是为每一个链接接入对应的通信soaket
1.WSAStartup 设置Socket版本信息,通常能够是2.1 2.2
2.建立SOCKET sk = socket(AF_INET,SOCK_STREAM,0);
3.绑定socket 绑定前,须要肯定几个参数
sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_addr.S_un.S_addr = inet_addr(“196.168.**.**”);
sa.sin_port = htons(10000);
bind(sk,(sockaddr*)&sa,sizeof(sockaddr));
4.监听socket
listen(sk,10);
5.接收链接
sockaddr_in saAcept;
Int nLen = sizeof(sockaddr_in);
accept(sk,&saAcept,&nLen);
6.接收数据recv()
Char* pBuff = new char[1024*10];
memset(pBuff,0,1024*10);
Int nRealLen = recv(pBuff,1024*10,0);
If(nRealLen < 0)
{
If(nRealLen == EAGAIN)
{
Return -1;
}
}
else
{
If(nRealLen == 0)
{
Return 0;
}
Else
{
Write(filePath,pBuff,nLen);
}
}
客户端:
1.设定socket版本 WSAStartup 通常为2.2
sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_addr.S_Un.S_addr = inet_addr(“196.168.**.**”);
sa.sin_port = htons(5000);
Int nRet = connect(sk,(socketaddr*)&sa,sizeof(socketaddr));
Char* pBuff = new char[1024*10];
Memset(pBuff,0,1024*10);
...// 数据填充代码
Sendto(sk,pBuff,1024*10,0);
Char* pBuff = new char[1024*10];
Memset(pBuff,0,1024*10);
Recvfrom(sk,pBuff,1024*10,0);
...数据处理
5.关闭套接字,closesocket(sk);
WSACleanup();
释放系统网络资源
若是没有释放,当程序退出时,系统会自动回收,通常客户端和服务器均须要释放
以上内容是这些天我的学习总结,欢迎你们提出批评