利用油槽实现进程之间的通信

 

//   油槽只能实现  一个进程写  一个进程读取 服务器读取 客户端写入     在服务器端只需 创建油槽然后即可通过 ReadFile和 WriteFile就可以实现向油槽的读写功能

//   在客户端需要利用CreateFile来打开一个油槽 然后通过CreateFile和ReadFile进行油槽的读写操作
//    油槽不仅能实现在本地进程之间的通信还可以实现网络进程之间的通信 
//    油槽名字的格式是 "\\\\.\\mailslot\\path"    如果服务端不在本地那么吧'.'换成主机名字 
//如果要实现全网的通信那么就把'.' 换成*  表示网内所有主机

 

///////服务器端代码

#include <iostream>
#include  "windows.h"
using namespace std ;
void main()
{
 HANDLE  hMailslot=::CreateMailslot("\\\\.\\mailslot\\mail",   //油槽的名称有固定格式
                                 0,  //指定可以写入到油槽的最大消息长度  0表示任意长度
            MAILSLOT_WAIT_FOREVER, //发生油槽读取时间的等待时间 这里是一直等待 如果0的话油槽没有声音就会立即返回
            NULL //油槽的安全结构属性默认为NULL
            ) ;
   if(hMailslot==INVALID_HANDLE_VALUE)
   {
    cout<<"油槽打开失败 !"<<endl ;
   }
 
 char buf[100] ; 
 DWORD  len ;
 while(1)
 {
  ::ReadFile(hMailslot,(void*)buf,100,&len,NULL) ;
  cout<<"客户端说:"<<buf<<endl ;

 }

}

 

 

/////客户端代码
#include <iostream>
#include "windows.h"
using namespace std ;
void main()
{

 HANDLE h1=::CreateFile("\\\\.\\mailslot\\mail",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(INVALID_HANDLE_VALUE==h1)
 {
  cout<<"油槽打开失败"<<endl ;
  return ;
 }
   
 char buf[100]  ;
   DWORD len;
   while(1)
   {
   cout<<"请输入要写入到油槽的数据:"<<endl ;
   cin>>buf;
   ::WriteFile(h1,(LPVOID)buf,strlen(buf)+1,&len,NULL) ;
   }

 

 

 

}

时间: 2024-12-26 18:20:40

利用油槽实现进程之间的通信的相关文章

利用命名管道实现进程之间的通信 .........

  /*   命名管道不仅可以实现 本地进程之间的通信还可以实现网络进程的通信   与油槽不同的是 管道式基于面向连接的可靠的通信 只能一对一传输 数据   我们可以通过      CreateNamedPipe()创建一个管道 ,可以指定模式是双向 即客户端 和服务端都可以进行读写 管道    就跟基于 socket的TCP通信类似   在服务端调用ConnectNamedPipe()来等待客户端连接管道 ,不像函数英文名字那样连接管道 而是等地啊客户端连接的到来     在客户端我们需要调用

C#、VC进程之间如何通信?

问题描述 C#.VC做的两个EXE,如何传递消息?最好给个例子 解决方案 解决方案二:进程间的通讯:1.内存共享,调用API:CreateFileMapping,MapViewOfFile,OpenFileMapping,UnmapViewOfFile.2.窗体消息.调用API:FindWindow,FindWindowEx,SendMessage,PostMessage.3.消息管道(MessagePipe)

通过命令管道,在进程之间进行通信的简单例子

write_to_named_pipe.py import os if __name__ == "__main__": named_pipe = "my_pipe" if not os.path.exists(named_pipe): os.mkfifo(named_pipe) def write_message(input_pipe, message): fd = os.open(input_pipe, os.O_WRONLY) os.write(fd, (mes

PostMessage和GetMessage能否在两个进程之间通信?

问题描述 一个A进程能否用PostMessage发送一个消息,使得一个B进程使用GetMessage将此消息获取到? 解决方案 解决方案二:关注解决方案三:好象是可以的吧解决方案四:线程可以使用PostMessage和PostThreadMessage来给发送消息到自己消息队列或者另一个线程的消息队列.解决方案五:需要在C#.Net中调用APIPostMessage函数来实现两个进程之间的通信,比如A.exe发个消息给B.exe,请问应该怎么做?解决方案六:C#.Net进程间通讯可以用IPCRE

VC中利用多线程技术实现线程之间的通信

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

Android利用LocalSocket实现Java端进程与C端进程之间的IPC

Android是建立在Linux之上的OS,在涉及到安全.网络协议.文件加密等功能时,往往需要通过C语言调用底层API来实现,而如何发出指令让C端执行我们想要的功能,并且在执行之后有返回结果呢,这就需要打通Java端进程和C端进程,使之能高效地通信.这样,C端进程用于实现功能,Java端进程负责UI.功能的触发及结果处理就可以了. 对于*nix系统来说,"一切皆为文件",Socket也不例外,Socket按照收发双方的媒介来说有三种类型:1,通过网络端口:2,通过文件系统:3,通过内存

Android Activity与Service通信(不同进程之间)详解_Android

在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activity中启动后台Service,通过Intent来启动,Intent中我们可以传递数据给Service,而当我们Service执行某些操作之后想要更新UI线程,我们应该怎么做呢?接下来我就介绍三种方式来实现Service与Activity之间的通信问题 Activity与Service通信的方式有三

Android Activity与Service通信(不同进程之间)详解

在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activity中启动后台Service,通过Intent来启动,Intent中我们可以传递数据给Service,而当我们Service执行某些操作之后想要更新UI线程,我们应该怎么做呢?接下来我就介绍三种方式来实现Service与Activity之间的通信问题 Activity与Service通信的方式有三

C#利用服务器实现客户端之间通信_实用技巧

先来讲述下我自己对于整个Socket通信过程的理解,毕竟初学,说错见谅,知道错了会改正~  首先在服务端新建一个serverSocket,对其进行初始化(一般包含AddressFamily:IP地址类型,SocketType:Socket传输数据方式,ProtoType:传输协议);  接着我们要设置server端要绑定的IP:port;然后开始监听,并设置最多同时监听多少个Client. 这时,服务端就在等待状态,直到某一个Client连接到这个ip:port上,这时serverSocket.