用IO完成埠實現管道非同步服務端

2021-10-19 09:35:39 字數 1615 閱讀 3434

windows程式設計中,如果涉及到本地兩個程序之間的通訊,最好的方式就是管道,管道支援同步和非同步兩種模式,作為服務端,當然用非同步好,本文章直接提供用io完成埠實現管道服務端的**。

//#include

"stdafx.h"

#include

;lptstr lpszpipename =

text

("\\\\.\\pipe\\pipename");

dword winapi threadfunc

(lpvoid)

;handle gpipeinst = invalid_handle_value;

intmain()

system

("pause");

return0;

}dword winapi threadfunc

(lpvoid p)

else

if>itype ==2)

;strcpy

(szwritebuf,

"hello ");

strcat

>szbuf)

;writefile

>hpipe, szwritebuf,

strlen

(szwritebuf)+1

,null

,null);

readfile

>szbuf,

1024

,null,;

dword err =

getlasterror()

;}}else}}

return0;

}此服務端接收客戶端的連線,每當客戶端用createfile進行連線時,服務端的當前例項就被消耗掉,於是呼叫createnamedpipe建立新的例項,以供客戶端連線。

服務端接收到客戶端傳送的資料後,前面新增hello ,然後返回給客戶端。

服務端寫資料的時候,直接用同步模式,原因是我覺得是沒必要弄成非同步模式

客戶端的例子也順帶提供下:

//#include

"stdafx.h"

#include

#include

intmain()

;sprintf

(pipenamestr,

"\\\\.\\pipe\\pipename");

if(waitnamedpipe

(pipenamestr, nmpwait_wait_forever)

== false)

char szbuf[

1024];

std::cout <<

"please input the buf:"

; std::cin >> szbuf;

handle hpipe =

createfile(_t

("\\\\.\\pipe\\pipename"

), generic_read | generic_write,0,

null

, open_existing, file_attribute_normal,

null);

if(hpipe != invalid_handle_value)

while(1

);return0;

}

I O 完成埠實現

這篇文章是繼承上篇 windows 同步裝置 i o 與非同步裝置 i o 未讀過的讀者可以去看看再來看這篇文章哈。建立新的i o完成埠 i o完成可能是最複雜的windows核心物件了,為了建立乙個i o完成端 們需要呼叫createiocompletionport函式 handle winapi...

完成埠實現echo tcp server

include stdio.h include winsock2.h pragma comment lib,ws2 32.lib define port 5150 define data bufsize 8192 typedef struct char buffer data bufsize int...

設定 i o port I O 完成埠實現

這篇文章是繼承上篇 windows 同步裝置 i o 與非同步裝置 i o 未讀過的讀者可以去看看再來看這篇文章哈。建立新的i o完成埠 i o完成可能是最複雜的windows核心物件了,為了建立乙個i o完成端 們需要呼叫createiocompletionport函式 handle winapi...