客户端代码:


#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;  }

更多相关文章

  1. golang 管道线程安全吗
  2. golang如何获取客户端ip?
  3. 关于Go语言的http/2服务器功能及客户端使用方法
  4. 一文学会Vue中间件管道[每日前端夜话0x8C]
  5. 使用Python开发客户端和服务端程序 理解应用层协议和表示层
  6. 4、输入、输出重定向、管道符、Vim编辑器
  7. 客户端用不着的数据结构之并查集
  8. 1.5 万 Star!界面酷炫、简单易用的数据库开源客户端
  9. 使用PHP来获取客户端和服务端IP

随机推荐

  1. 使用mediaplayer + surfaceview来播放视
  2. android try catch并不影响性能
  3. Lance老师UI系列教程第三课->QQ登录注册
  4. getCacheDir()和getFilesDir()方法区别
  5. 关于AndroidStudio中提示cannot resolve
  6. eclipse转用android studio——常用快捷
  7. Android多窗口分屏(原生方法)
  8. JS唤醒Android APP(包括在外部浏览器和We
  9. Android中如何有效的加载图片
  10. SmartRefreshLayout集成笔记,实现下拉刷新