練習命名管道的使用

2022-02-04 12:40:30 字數 2942 閱讀 6748

服務端:

class

program

console.read();

}static

void

p()

static

int count=0

;

static

void

createpipe()

", ++count);

svr.waitforconnection();

console.writeline(

"客戶端已經連線");

maxnumberofserverinstances--;

console.writeline(

"還可以使用次

", maxnumberofserverinstances);

byte msg = new

byte[3

]; //客戶端傳送過來的3個位元組,僅測試用。只有這樣才可以在服務端模擬客戶端

svr.read(msg,

0, 3

); console.writeline(msg[

2]);

svr.runasclient(p);

//模擬客戶端的使用者名稱,模擬的是執行伺服器端的程序的使用者名稱

console.writeline(svr.getimpersonationusername());

filestream fs = new filestream("

wildlife.wmv

", filemode.open, fileaccess.read, fileshare.read);

int buffersize = 102400

;

byte d = new

byte

[buffersize];

int total = 0

;

int line =console.cursortop;

int readcount = 0

;

while ((readcount = fs.read(d, 0, buffersize)) > 0

) kb

", total /1024f);

//以前不知道怎麼處理網路傳輸前和傳輸後檔案大小不一致的問題,這麼我自己練習時發現,讀多少寫多少是最好的方式

svr.write(d,

0, readcount);

if (readcount == buffersize)//

不是最後一次迴圈

else

}fs.close();

svr.disconnect();

//斷開很重要,否則客戶端一直等待接收資料 using的作用類似

svr.close();

svr.dispose();

//實際這樣做存在問題,目前還沒有解決。會報兩種異常但不是總出現:1、所有範例都在使用中(close或dispose後解決);2、指定路徑拒絕訪問

createpipe();

//銷毀乙個例項,又新建乙個例項

maxnumberofserverinstances++;

}catch

(exception ex)

}}

客戶端:

class

program

, 0, 3

); console.writeline(

"伺服器例項數目:

", client.numberofserverinstances);

int buffersize = 10240

;

byte d = new

byte

[buffersize];

filestream fs = new filestream("

wildlife -

" + guid.newguid() + "

.wmv

", filemode.create);

int line =console.cursortop;

long total = 0

;

int readcount = 0

;

while ((readcount = client.read(d, 0, buffersize)) > 0

) byte

", readcount);

console.writeline(

"獲取到位元組kb

", total /1024f);

//讀到多少寫多少,還有乙個好處就是無需關心伺服器端和客戶端的緩衝的大小。否則兩端緩衝一樣大也不會有問題。但是測試發現跨機器後每次讀取的不一定有緩衝這麼大,與網路有關

fs.write(d,

0, readcount);

console.cursortop =line;

}console.cursortop += 2

; console.writeline(

"done on client");

console.cursortop += 1

; fs.close();}}

catch

(exception ex)

console.read();

}}

客戶端配置檔案只存了服務端機器的ip,供客戶端訪問。可在區域網內傳輸檔案,以前在區域網中用程式訪問檔案使用共享的方式,而命名管道更簡單。

mysql使用命名管道 命名管道

管道是用於相關過程之間的通訊。我們是否可以使用管道進行不相關的程序通訊,比方說,我們要從乙個終端執行客戶端程式,從另乙個終端執行伺服器程式?答案是否定的。那麼怎樣才能實現不相關的程序通訊,簡單的答案就是使用 命名管道。即使這適用於相關的程序,但是使用命名管道進行相關的程序通訊沒有任何意義。我們使用乙...

命名管道的使用

我在工作中碰到了乙個這樣的問題,有兩個程式,第乙個程式會fork乙個程序exec呼叫第二個程式,這樣呼叫後,第乙個程式還是繼續執行父程序的。我要求第乙個程式的父程序停止執行,直到第二個程式退出或執行到某個時候才繼續執行。下面是兩個例子程式的 先執行gui程式,再執行player程式 gui 在後台執...

命名管道的簡單使用

華清遠見嵌入式學院 講師。區別於無名管道,命名管道可以用於沒有親緣關係的程序之間進行通訊,且命名管道在一些特點上更類似於檔案,其具有檔名,檔案屬性及存放路徑等資訊,也就是說利用命名管道進行操作後,我們可以在相應的路徑下查詢到它,更方便程式設計的需要和操作,且命名管道嚴格地遵循先進先出原則。命名管道在...