千家信息网

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

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章给大家分享的是有关java中命名管道跨进程通讯的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。客户端代码:#include "stdafx.h" #inc
千家信息网最后更新 2025年02月04日java中命名管道跨进程通讯的示例分析

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

客户端代码:

#include "stdafx.h"  #include   #include   #include     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()00);              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   #include   #include     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()00);                  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中命名管道跨进程通讯的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0