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