socket在本机的多进程通信

other123othe 2015-07-24 05:24:52
想问一下大神们
我在本机建立一个exe作为服务器,同时在本机可能有多个相同代码的APP程序来和exe进行通信,可以用socket进行通信吗?可以保证收发正确吗?
...全文
679 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gnorth 2015-10-01
  • 打赏
  • 举报
回复
///////////////发送端 struct CD_IN_OUT_TEST_STRUCT{ DWORD dwProcessId; LPVOID lpOutBuffer; char szInBuffer[32]; }; char szOutBuffer[32]; CD_IN_OUT_TEST_STRUCT cdp; cdp.dwProcessId = GetCurrentProcessId(); cdp.lpOutBuffer = szOutBuffer; memcpy_s(cdp.szInBuffer, 32, "this is a in text!", strlen("this is a in text!") + 1); COPYDATASTRUCT cd; cd.lpData = &cdp;/*要传入的缓冲区*/ cd.cbData = sizeof(CD_IN_OUT_TEST_STRUCT);/*缓冲区大小*/ cd.dwData = 1000;/*自定义数值,用于对端内部区分逻辑*/ if(SendMessageA(hWnd, WM_COPYDATA, 0, (LPARAM)&cd)) MessageBoxA(NULL, szOutBuffer, "", MB_OK); //////////被动端 struct CD_IN_OUT_TEST_STRUCT{ DWORD dwProcessId; LPVOID lpOutBuffer; char szInBuffer[32]; }; LRESULT WINAPI OnCopyData(HWND hWnd, COPYDATASTRUCT *lpcd) { switch(lpcd->dwData) { case 1000:/*dwData的作用就在于此*/ { CD_IN_OUT_TEST_STRUCT *p = (CD_IN_OUT_TEST_STRUCT*)lpcd->lpData; MessageBoxA(NULL, p->szInBuffer, "", MB_OK); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, p->dwProcessId); /*如果打开失败了,请百度搜索,进程提升SE_DEBUG权限*/ WriteProcessMemory(hProcess, p->lpOutBuffer, "this is a out buffer!", strlen("this is a out buffer!") + 1, NULL); CloseHandle(hProcess); return TRUE; } } return FALSE; }
gnorth 2015-10-01
  • 打赏
  • 举报
回复
windows上性能最高的就是共享内存了,不过通信问题往往带来的有同步问题,折中再选择一下的话,考虑到同步,最简单的方式是使用窗口消息 WM_COPYDATA来in 对端使用WriteProcessMemory的方式来实现发送消息那一方的Out。
china_jeffery 2015-09-28
  • 打赏
  • 举报
回复
socket实现进程间通信有点重了,一个server就要占用一个端口等。 推荐使用libipc,基于命名管道
小竹z 2015-08-12
  • 打赏
  • 举报
回复
每个exe监听端口不一样就可以在本机运行多个
oyljerry 2015-08-07
  • 打赏
  • 举报
回复
socket,然后开线程跟各个客户端建立连接,发送,接收数据就可以了。
  • 打赏
  • 举报
回复
本机用管道吧
xian_wwq 2015-08-05
  • 打赏
  • 举报
回复
使用socket进行进程间通讯, 有个内存映射方法不具备的优点 就是某一天如果需要把程序部署在多台机器上 只需要修改下初始配置参数就好了
赵4老师 2015-08-05
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
zilaishuichina 2015-07-27
  • 打赏
  • 举报
回复
可以用socket进行通信吗? 可以 可以保证收发正确吗? 代码写对就可以
Eleven 2015-07-25
  • 打赏
  • 举报
回复
进程间通信的方式很多,用socket也是可以的。如果注重效率可以考虑使用共享内存的方式。CreateFileMapping
Sandrer 2015-07-25
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
进程间通信的方式很多,用socket也是可以的。如果注重效率可以考虑使用共享内存的方式。CreateFileMapping
+1 反正本机互联的网络底层还是 CreateFileMapping 实现的 而且这东西又不难, 建议楼主使用

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧