首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

匿名和命名管道(windows)(2)

匿名和命名管道(windows)(2)

客户端源码
view plaincopy to clipboardprint?
#include <windows.h>   
#include <iostream>   
using namespace std;   
const TCHAR szPipeName[] = L"[url=]////hello//pipe//lvbin[/url]";   
int main(void)   
{   
    HANDLE hPipe = CreateFile(szPipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);   
    if (hPipe == INVALID_HANDLE_VALUE)   
    {   
        printf("CreateFile return [%d]!/n", GetLastError());   
        return -1;   
    }   
    DWORD dwRead, dwWrite;   
    char szBuf[1024] = {0};   
      
    for (int i = 0; i < 10; ++i)   
    {   
        sprintf(szBuf, "%d", i);   
        WriteFile(hPipe, szBuf, strlen(szBuf), &dwWrite, 0);   
        printf("Send %s/n", szBuf);   
        memset(szBuf, 0, sizeof(szBuf));   
        ReadFile(hPipe, szBuf, sizeof(szBuf), &dwRead, 0);   
        printf("Recv %s/n", szBuf);   
    }   
}  
#include <windows.h>
#include <iostream>
using namespace std;
const TCHAR szPipeName[] = L"[url=]////hello//pipe//lvbin[/url]";
int main(void)
{
HANDLE hPipe = CreateFile(szPipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hPipe == INVALID_HANDLE_VALUE)
{
  printf("CreateFile return [%d]!/n", GetLastError());
  return -1;
}
DWORD dwRead, dwWrite;
char szBuf[1024] = {0};

for (int i = 0; i < 10; ++i)
{
  sprintf(szBuf, "%d", i);
  WriteFile(hPipe, szBuf, strlen(szBuf), &dwWrite, 0);
  printf("Send %s/n", szBuf);
  memset(szBuf, 0, sizeof(szBuf));
  ReadFile(hPipe, szBuf, sizeof(szBuf), &dwRead, 0);
  printf("Recv %s/n", szBuf);
}
}
服务器端源码
view plaincopy to clipboardprint?
#include <iostream>   
#include <Windows.h>   
using namespace std;   
  
int main(void)   
{   
    TCHAR strPipeName[] = L"[url=]////.//pipe//lvbin[/url]";   
    PSECURITY_DESCRIPTOR psd;   
    psd = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);   
    if (!InitializeSecurityDescriptor(psd, SECURITY_DESCRIPTOR_REVISION))   
    {   
        LocalFree((HLOCAL)psd);   
        return -1;   
    }   
    if (!SetSecurityDescriptorDacl(psd, TRUE, (PACL)NULL, FALSE))   
    {   
        LocalFree((HLOCAL)psd);   
        return -1;   
    }   
    SECURITY_ATTRIBUTES saAttr;   
    saAttr.nLength =sizeof(SECURITY_ATTRIBUTES);   
    saAttr.lpSecurityDescriptor = psd;   
    saAttr.bInheritHandle = TRUE;   
    HANDLE hIPC = CreateNamedPipe(strPipeName,   
                                                                        PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,   
                                                                        PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,   
                                                                        1, 0, 0, 1000, &saAttr);   
    if (hIPC == INVALID_HANDLE_VALUE)   
    {   
        return -1;   
    }   
    char szBuf[1024] = {0};   
    DWORD dwRead, dwWrite;   
    char szWrite[] = "Get You/n";   
    ConnectNamedPipe(hIPC, NULL);   
    while(1)   
    {   
        if (!ReadFile(hIPC, szBuf, sizeof(szBuf), &dwRead, 0))   
        {   
            break;   
        }   
        printf("%s/n", szBuf);   
        memset(szBuf, 0, sizeof(szBuf));   
           
        if (!WriteFile(hIPC, szWrite, strlen(szWrite), &dwWrite, NULL))   
        {   
            break;   
        }         
    }   
    return 0;   
};  
#include <iostream>
#include <Windows.h>
using namespace std;
int main(void)
{
TCHAR strPipeName[] = L"[url=]////.//pipe//lvbin[/url]";
PSECURITY_DESCRIPTOR psd;
psd = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
if (!InitializeSecurityDescriptor(psd, SECURITY_DESCRIPTOR_REVISION))
{
  LocalFree((HLOCAL)psd);
  return -1;
}
if (!SetSecurityDescriptorDacl(psd, TRUE, (PACL)NULL, FALSE))
{
  LocalFree((HLOCAL)psd);
  return -1;
}
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength =sizeof(SECURITY_ATTRIBUTES);
saAttr.lpSecurityDescriptor = psd;
saAttr.bInheritHandle = TRUE;
HANDLE hIPC = CreateNamedPipe(strPipeName,
                  PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
                  PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
                  1, 0, 0, 1000, &saAttr);
if (hIPC == INVALID_HANDLE_VALUE)
{
  return -1;
}
char szBuf[1024] = {0};
DWORD dwRead, dwWrite;
char szWrite[] = "Get You/n";
ConnectNamedPipe(hIPC, NULL);
while(1)
{
  if (!ReadFile(hIPC, szBuf, sizeof(szBuf), &dwRead, 0))
  {
   break;
  }
  printf("%s/n", szBuf);
  memset(szBuf, 0, sizeof(szBuf));
  
  if (!WriteFile(hIPC, szWrite, strlen(szWrite), &dwWrite, NULL))
  {
   break;
  }  
}
return 0;
};
很简单的
怕以后找代码麻烦,就贴在这了。
继承事业,薪火相传
返回列表