温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java中命名管道跨进程通讯的示例分析

发布时间:2021-09-16 18:09:44 来源:亿速云 阅读:394 作者:小新 栏目:编程语言

这篇文章给大家分享的是有关java中命名管道跨进程通讯的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

客户端代码:

#include "stdafx.h"   #include <stdio.h>   #include <windows.h>   #include <ctime>      int main(int argc, _TCHAR* argv[])   {       srand(time(NULL));          DWORD wlen = 0;       Sleep(1000);//等待pipe的创建成功!          BOOL bRet = WaitNamedPipe(TEXT("\\\\.\\Pipe\\mypipe"), NMPWAIT_WAIT_FOREVER);          if (!bRet)       {           printf("connect the namedPipe failed!\n");           return 0;       }          HANDLE hPipe = CreateFile(          //管道属于一种特殊的文件           TEXT("\\\\.\\Pipe\\mypipe"),    //创建的文件名           GENERIC_READ | GENERIC_WRITE,   //文件模式           0,                              //是否共享           NULL,                           //指向一个SECURITY_ATTRIBUTES结构的指针           OPEN_EXISTING,                  //创建参数           FILE_ATTRIBUTE_NORMAL,          //文件属性(隐藏,只读)NORMAL为默认属性           NULL);                          //模板创建文件的句柄          if (INVALID_HANDLE_VALUE == hPipe)       {           printf("open the exit pipe failed!\n");       }       else       {           while(true)           {               char buf[256] = "";               sprintf(buf,"%s%d",buf,rand()%1000);               if(WriteFile(hPipe,buf,sizeof(buf),&wlen,0)==FALSE) //向服务器发送内容               {                   printf("write to pipe failed!\n");                   break;               }               else               {                   printf("To Server: data = %s, size = %d\n", buf, wlen);                   char rbuf[256] = "";                   DWORD rlen = 0;                   ReadFile(hPipe, rbuf, sizeof(rbuf), &rlen, 0);  //接受服务发送过来的内容                   printf("From Server: data = %s, size = %d\n", rbuf, rlen);               }               Sleep(1000);           }           CloseHandle(hPipe);//关闭管道       }          system("pause");       return 0;   }

服务端代码:

#include "stdafx.h"   #include <stdio.h>   #include <windows.h>   #include <ctime>      int main(int argc, _TCHAR* argv[])   {       srand(time(NULL));          char buf[256] = "";       DWORD rlen = 0;       HANDLE hPipe = CreateNamedPipe(           TEXT("\\\\.\\Pipe\\mypipe"),                        //管道名           PIPE_ACCESS_DUPLEX,                                 //管道类型            PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,  //管道参数           PIPE_UNLIMITED_INSTANCES,                           //管道能创建的最大实例数量           0,                                                  //输出缓冲区长度 0表示默认           0,                                                  //输入缓冲区长度 0表示默认           NMPWAIT_WAIT_FOREVER,                               //超时时间           NULL);                                              //指定一个SECURITY_ATTRIBUTES结构,或者传递零值          if (INVALID_HANDLE_VALUE == hPipe)       {           printf("Create Pipe Error(%d)\n",GetLastError());       }       else       {           printf("Waiting For Client Connection...\n");              if(!ConnectNamedPipe(hPipe, NULL))  //阻塞等待客户端连接。           {               printf("Connection failed!\n");           }           else           {               printf("Connection Success!\n");           }              while (true)           {               if(!ReadFile(hPipe,buf,256,&rlen,NULL)) //接受客户端发送过来的内容               {                              printf("Read Data From Pipe Failed!\n");                   break;               }               else               {                   printf("From Client: data = %s, size = %d\n", buf, rlen);                                      char wbuf[256] = "";                   sprintf(wbuf, "%s%d", wbuf, rand()%1000);                   DWORD wlen = 0;                   WriteFile(hPipe, wbuf, sizeof(wbuf), &wlen, 0); //向客户端发送内容                   printf("To Client: data = %s, size = %d\n", wbuf, wlen);                   Sleep(1000);               }           }           FlushFileBuffers(hPipe);            DisconnectNamedPipe(hPipe);            CloseHandle(hPipe);//关闭管道       }          system("pause");       return 0;   }

感谢各位的阅读!关于“java中命名管道跨进程通讯的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI