利用windows api實現程式通訊(命名管道)
服務端:
1.使用API函式CreateNamedPipe建立與命名管道的連線。
2.使用API函式ConnectNamedPipe等待客戶端的連線。(可用這個函式將一個管道換成同另一個客戶連線,也就是可以重複呼叫該函式,但必須用DisconnectNamedPipe函式斷開之前程式的連線)
3.使用API函式WriteFile和ReadFile分別向客戶端傳送資料或從客戶端接收資料。
4.使用API函式CloseHandle關閉開啟的命名管道會話。
客戶端:
1.使用API函式WaitNamedPipe等待一個命名管道例項供自已使用。
2.使用API函式CreateFile建立與命名管道的連線。
3.使用API函式WriteFile和ReadFile分別向伺服器端傳送資料或從伺服器端接收資料。
4.使用API函式CloseHandle關閉開啟的命名管道會話。
服務端
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
//建立命名管道
// PIPE_ACCESS_DUPLEX 管道是雙向的
// PIPE_ACCESS_INBOUND 資料從客戶端流到伺服器端
// PIPE_ACCESS_OUTBOUND 資料從伺服器端流到客戶端
char buffer[1024];
wchar_t* name=L"\\\\.\\pipe\\test";
DWORD num;
HANDLE hPipe = CreateNamedPipe(name,PIPE_ACCESS_DUPLEX,PIPE_TYPE_BYTE|PIPE_READMODE_BYTE,1,0,0,1000,NULL);
if(hPipe==INVALID_HANDLE_VALUE){
cout<<"create pipe error";
return 0;
}
cout<<"wait for client"<< endl;
//阻塞等待客戶端來連線
if(!ConnectNamedPipe(hPipe,NULL)){
cout<<"client connect error";
return 0;
}
cout << "client connect succ" << endl;
while(1){
if(ReadFile(hPipe,buffer,1024,&num,NULL)==false){
cout<<"read error";
break;
}
buffer[num]=0;
cout<<"read succ:"<<buffer<<endl;
}
//
cout<<"close pipe";
CloseHandle(hPipe);
return 0;
}
客戶端
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[])
{
//客戶端
//等待命名管道例項
char buffer[1024];
wchar_t *name=L"\\\\.\\pipe\\test";
DWORD num;
//阻塞等待
if(WaitNamedPipe(name,NMPWAIT_WAIT_FOREVER)==false){
cout<<"wait name pipe error"<<endl;
return 0;
}
cout<<"wait name succ"<<endl;
HANDLE hPipe = CreateFile(name,GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hPipe==INVALID_HANDLE_VALUE){
cout<<"open name pipe error"<<endl;
return 0;
}
cout<<"open pipe and connect succ"<<endl;
int sendNum=0;
while(1){
sprintf(buffer,"sendxxxxxx:%d",sendNum);
Sleep(2000);
if(WriteFile(hPipe,buffer,strlen(buffer),&num,NULL)==false){
cout<<"write file error"<<endl;
break;
}
cout<<"send ok...."<<sendNum++<<endl;
}
CloseHandle(hPipe);
return 0;
}
相關文章
- 匿名管道通訊實現
- windows命名管道Windows
- Delphi 簡單命名管道在兩個程式間通訊
- Java中利用管道實現執行緒間的通訊(轉)Java執行緒
- Windows程式通訊之一看就懂的匿名管道通訊Windows
- 兩個有名管道實現qq通訊
- Linux系統程式設計之程式間通訊方式:命名管道(二)Linux程式設計
- Linux系統程式設計之程式間通訊方式:命名管道(一)Linux程式設計
- Windows 多程式通訊API總結WindowsAPI
- 程式間通訊(一)管道
- C#使用命名管道通過網路在程式之間進行通訊C#
- 利用SQL實現通訊錄SQL
- Java的通過管道來實現執行緒通訊Java執行緒
- 基於Windows API的命名管道的封裝與使用詳解WindowsAPI封裝
- 利用管道Pipelines做程序間的通訊
- Linux 的程式間通訊:管道Linux
- linux 程式間通訊之管道Linux
- 系統程式設計——管道通訊程式設計
- PHP多程式程式設計(2):管道通訊PHP程式設計
- 在VC++ 6.0下利用訊息實現內部程式通訊 (轉)C++
- linux程式間通訊--管道(PIPE & FIFO)Linux
- Linux程式間通訊②:有名管道FIFOLinux
- 溫故之.NET程式間通訊——管道
- 【IPC程式間通訊之二】管道PipeC程式
- 利用Storage Event實現頁面間通訊
- 利用飛鴿協議實現通訊功能協議
- golang實現子程式通訊Golang
- Java實現TCP通訊程式JavaTCP
- windows程式間通訊Windows
- 管道流間的通訊
- 程序間通訊(1)-管道
- 3|程式間通訊--有名管道學習筆記筆記
- linux程式間通訊-----管道總結例項Linux
- Android小知識-利用OkHttp實現WebSocket通訊AndroidHTTPWeb
- 如何利用 Netty 實現自定義協議通訊?Netty協議
- 元件間通訊--利用mitt實現事件匯流排元件MIT事件
- 在VB中利用API進行串列埠通訊API串列埠
- 通過 App Groups 實現程式間通訊APP