社区
C#
帖子详情
c#中怎样实现进程间通信,如何表示管道、共享内存、消息队列?(高分请教)
阿来007
2003-08-26 07:13:21
c#中有没有名字空间用于描述进程间通信(IPC)?
有无管道、共享内存、消息队列?
...全文
2405
10
打赏
收藏
c#中怎样实现进程间通信,如何表示管道、共享内存、消息队列?(高分请教)
c#中有没有名字空间用于描述进程间通信(IPC)? 有无管道、共享内存、消息队列?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
saucer
2003-08-26
打赏
举报
回复
"P/Invoke", the Platform Invocation facility in .NET used to call DLL functions
alphawin
2003-08-26
打赏
举报
回复
up
daou101
2003-08-26
打赏
举报
回复
saucer(思归, .NET MVP) ,又见到你,好耶!
消息队列,socket,管道都可以,还有web service,Enterprise Service都可以实现,甚至分布式计算(通讯)。
saucer
2003-08-26
打赏
举报
回复
消息队列, see System.Messaging.MessageQueue
共享内存: no
管道: use P/Invoke and API
cppTrier
2003-08-26
打赏
举报
回复
saucer的意思是你用P/Invoke 调用win32 API
阿来007
2003-08-26
打赏
举报
回复
up
阿来007
2003-08-26
打赏
举报
回复
c#中怎么用?
我是用在单机进程间通信,各进程共享同一数据块
alaisalaix
2003-08-26
打赏
举报
回复
Look up these Win32 APIs:
CreateFileMapping
MapViewOfFile
CreateMutex
WaitForSingleObject
_weiKun_
2003-08-26
打赏
举报
回复
在Windows环境下,实现进程间通信的方式有很多种,如套接字、管道、远程过程调用和NETBIOS等,邮槽是其中实现单通道进程间通信的一种。创建邮槽的进程被称为邮槽服务器,而其它发送消息给邮槽的进程被称为邮槽客户端。邮槽客户端能发送消息给本机的邮槽,也可发送消息给局域网内其他计算机内的邮槽,所有这些消息都存储在邮槽内,直到邮槽服务器读取它。这些消息通常是以广播的方式发送,建立在面向无链接的数据报的基础上,因此在线路不好时传输质量不可靠。
这种进程间通信的方式比较适用于在局域网环境内传送和接收短消息,也可在局域网内向所有计算机广播消息。
用邮槽进行进程间通信主要通过三个步骤来实现:创建邮槽服务器,向邮槽发送消息和从邮槽中读取消息。下面笔者将用Windows的API函数来完成这三个步骤。
一、创建邮槽服务器
以下代码用于创建一个名叫sample_mailslot的邮槽:
BOOL FAR PASCAL Makeslot( )
{
// 邮槽名称都定义在\\.\mailslot\目录下
LPSTR lpszSlotName = "\\\\.\\mailslot\\sample_mailslot";
// 邮槽句柄"hSlot1" 是一个全局变量
hSlot1 = CreateMailslot(lpszSlotName,0,
// 对接受的消息没有最大值限制
MAILSLOT_WAIT_FOREVER, // 没有最大读延迟时间
(LPSECURITY_ATTRIBUTES) NULL); // 无安全属性
if (hSlot1 == INVALID_HANDLE_VALUE)
//创建邮槽失败
return FALSE;
return TRUE;
}
二、客户端与邮槽服务器通信
客户端通过API函数向邮槽发送消息,然后消息被广播到域内的每一台计算机上,但只有指定的邮槽接收这些消息。在这里要注意被广播的消息每条不能超过400个字节,但对每个邮槽能接受的消息的数量没有限制。
BOOL FAR PASCAL Writeslot( ) {
BOOL fResult;
HANDLE hFile;
DWORD cbWritten;
LPSTR lpszMessage = "Message for sample_mailslot in primary domain";
hFile = CreateFile("\\\\*\\mailslot\\sample_mailslot",
GENERIC_WRITE,
FILE_SHARE_READ,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
if (hFile == INVALID_HANDLE_VALUE)
// 创建客户端邮槽句柄失败
return FALSE;
fResult = WriteFile(hFile, lpszMessage,
(DWORD) lstrlen(lpszMessage) + 1,
&&cbWritten,
(LPOVERLAPPED) NULL);
if (!fResult)
// 发送消息错误
return FALSE;
fResult = CloseHandle(hFile);
return TRUE;
}
三、从邮槽中读取数据
邮槽服务器通过GetMailslotInfo函数判断邮槽中是否有数据,如果有,则通过ReadFile函数从邮槽中读取。下面的代码完成从邮槽中读取一条消息。
BOOL FAR PASCAL Readslot()
{
DWORD cbMessage, cMessage, cbRead;
BOOL fResult;
LPSTR lpszBuffer;
cbMessage = cMessage = cbRead = 0;
//邮槽句柄hSlot1是一个全局变量
fResult = GetMailslotInfo(hSlot1,
// 邮槽句柄
(LPDWORD) NULL, // 对消息的大小没有最大限制
&&cbMessage, // 下一条消息的大小
&&cMessage, // 消息的数量 (LPDWORD) NULL); if(cbMessage == MAILSLOT_NO_MESSAGE)
// 邮槽内无消息
{ printf( "No waiting messages.");
return TRUE; }
// 为消息分配内存
lpszBuffer = (LPSTR) GlobalAlloc(GPTR, cbMessage);
lpszBuffer[0] = '\0'; fResult = ReadFile(hSlot1, lpszBuffer, cbMessage, &&cbRead,
(LPOVERLAPPED) NULL);
// 显示消息
Printf("%s",lpszBuffer);
GlobalFree((HGLOBAL) lpszBuffer);
return TRUE; }
阿来007
2003-08-26
打赏
举报
回复
to saucer(思归, .NET MVP)
P/Invoke是什么?
哪些API函数用于进程间通信?
消息队列System.Messaging.MessageQueue需不需要把消息队列组件装上?
C#
进程
间
通信
-
共享
内存
代码实例
C#
进程
间
通信
-
共享
内存
代码实例。用
实现
了2个
进程
,他们之
间
使用
共享
内存
方式进行
通信
。
C#
的Socket
实现
UDP协议
通信
C#
的Socket
实现
UDP协议
通信
CSharp
物联网即时
通信
架构
实现
与实战
课程是老师的第二套课程,将在项目
中
积累的一线多年技术经验从0开始源码级别
实现
一个物联网
通信
引擎,并在传输层TCP,UDP协议基础上
实现
了TEXT,STREAM,WEBSOCKET物联网
通信
MQTT协议,并把
实现
的协议应用在物联网芯片
实现
web网页端,mqtt客户端 以及个人微信端wechat APP的数据指令交互控制硬件设备,大家会从0开始掌握tcp,udp,stream,text,http,websocket,mqtt物联网协议
实现
的同时,还能更清楚的知道其
实现
过程,并将这些协议综合的应用到现实生活
中
即物联网设备的交互控制,本课程并没有去套用别人
实现
好的轮子,而是让各位真正的掌握核心技术,助你在技术上
实现
质的提升,并不是PPT扯物联网概念,全是真抢的一行行代码打出来。 同时对于深度理解workerman/swoole/libevent/socket编程等也有极大益处。在此不再过多陈述,更多详情敬请观看视频! 备注:项目部分基础知识依赖于老师的第一套课程
C#
串口
通信
工具
博客对应的源文件代码,网址:http://blog.csdn.net/rehongchen/article/details/7851673 希望能对大家有所帮助。
进程
间
通信
——
管道
,
消息
队列
,
共享
内存
进程
间
通信
的本质是让两个不相干的
进程
看到同一份资源。这个资源是由操作系统提供的一个文件。
进程
间
通信
的目的:1.数据传输:一个
进程
需要将它 的数据发送给另一个
进程
。2.资源
共享
:多个
进程
之
间
共享
同样的资源。3.通知事件:一个
进程
需要向另一个(组)
进程
发送
消息
,通知它们发生了某种事件。(
进程
终止时通知父
进程
)4.
进程
控制:有些
进程
希望完全控制另一个
进程
的执行,此时控制
进程
希望能够拦截另一个
进程
的所...
C#
110,566
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章