扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:戴飞 来源:程序员 2007年11月3日
关键字:
internal ServerNamedPipe(stringname, uint outBuffer,uintinBuffer,intmaxReadBytes){ PipeConnection=newServerPipeConnection(name,outBuffer,inBuffer,maxReadBytes); PipeThread=newThread(newThreadStart(PipeListener)); PipeThread.IsBackground=true; PipeThread.Name ="PipeThread "+this.PipeConnection.NativeHandle.ToString(); LastAction=DateTime.Now; } |
private void PipeListener() { CheckIfDisposed(); try{ Listen=Form1.PipeManager.Listen; Form1.ActivityRef.AppendText("Pipe"+this.PipeConnection.NativeHandle.ToString() + ": new pipe started" + Environment.NewLine); while(Listen){ LastAction=DateTime.Now; // 从客户端管道读取数据: stringrequest=PipeConnection.Read(); LastAction=DateTime.Now; if(request.Trim()!=""){ //PipeManager.HandleRequest 方法接受客户端请求处理之, // 然后进行响应,这个响应接着就被写入管道。 PipeConnection.Write(Form1.PipeManager.HandleRequest(request)); Form1.ActivityRef.AppendText("Pipe"+this.PipeConnection.NativeHandle.ToString()+ ":requesthandled"+Environment.NewLine); } else{ PipeConnection.Write("Error:badrequest");} LastAction=DateTime.Now; // 从客户端管道断开连接 PipeConnection.Disconnect(); if(Listen){ Form1.ActivityRef.AppendText("Pipe"+this.PipeConnection. NativeHandle.ToString()+":listening"+Environment.NewLine); // 开始监听一个新的连接: Connect(); } Form1.PipeManager.WakeUp(); } } catch(System.Threading.ThreadAbortExceptionex){} catch(System.Threading.ThreadStateExceptionex){} catch(Exceptionex){ //Logexception } finally{ this.Close();} } |
public void Initialize() { Pipes=Hashtable.Synchronized(_pipes); Mre =newManualResetEvent(false); MainThread =newThread(newThreadStart(Start)); MainThread.IsBackground=true; MainThread.Name = "MainPipeThread"; MainThread.Start(); Thread.Sleep(1000); } |
private void Start() { try{ while(_listen){ int[]keys=newint[Pipes.Keys.Count]; Pipes.Keys.CopyTo(keys,0); // 循环检验ServerPipeConnection 对象是否还是可用: foreach(intkeyinkeys){ ServerNamedPipeserverPipe=(ServerNamedPipe)Pipes[key]; if(serverPipe!=null&& DateTime.Now.Subtract(serverPipe.LastAction).Milliseconds> PIPE_MAX_STUFFED_TIME && serverPipe.PipeConnection.GetState()!=InterProcessConnectionState.WaitingForClient){ serverPipe.Listen=false; serverPipe.PipeThread.Abort(); RemoveServerChannel(serverPipe.PipeConnection.NativeHandle); } } //NumberPipes 字段包含了可以在服务器上拥有的命名管道最大数目 if(numChannels<=NumberPipes){ ServerNamedPipe pipe = new ServerNamedPipe(PipeName,OutBuffer,InBuffer,MAX_READ_BYTES); try{ //Connect 方法将新生成的管道置为监听模式。 pipe.Connect(); pipe.LastAction=DateTime.Now; System.Threading.Interlocked.Increment(refnumChannels); // 开始ServerPipeConnection 线程 pipe.Start(); Pipes.Add(pipe.PipeConnection.NativeHandle,pipe); } catch (InterProcessIOException ex) { RemoveServerChannel(pipe.PipeConnection.NativeHandle); pipe.Dispose(); } } else{ Mre.Reset(); Mre.WaitOne(1000,false); } } } catch { //Logexception } } |
IInterProcessConnectionclientConnection=null; try{ clientConnection=newClientPipeConnection("MyPipe","."); clientConnection.Connect(); clientConnection.Write(textBox1.Text); clientConnection.Close(); } catch{ clientConnection.Dispose(); } |
濠电姷鏁告慨鐑姐€傛禒瀣劦妞ゆ巻鍋撻柛鐔锋健閸┾偓妞ゆ巻鍋撶紓宥咃躬楠炲啫螣鐠囪尙绐為梺褰掑亰閸撴盯鎮惧ú顏呪拺闂傚牊鍗曢崼銉ョ柧婵犲﹤瀚崣蹇旂節婵犲倻澧涢柛瀣ㄥ妽閵囧嫰寮介妸褋鈧帡鏌熼挊澶婃殻闁哄瞼鍠栭幃婊堝煛閸屾稓褰嬮柣搴ゎ潐濞叉ê鐣濈粙璺ㄦ殾闁割偅娲栭悡娑㈡煕鐏炲墽鐭嬫繛鍫熸倐濮婄粯鎷呯粵瀣異闂佹悶鍔嬮崡鍐茬暦閵忋倕鍐€妞ゆ劑鍎卞皬闂備焦瀵х粙鎴犫偓姘煎弮瀹曚即宕卞Ο闀愮盎闂侀潧鐗嗛幊搴㈡叏椤掆偓閳规垿鍩ラ崱妞剧凹濠电姰鍨洪敋閾荤偞淇婇妶鍛櫤闁稿鍊圭换娑㈠幢濡纰嶉柣搴㈣壘椤︾敻寮诲鍫闂佸憡鎸鹃崰搴敋閿濆鏁嗗〒姘功閻绻涢幘鏉戠劰闁稿鎹囬弻锝呪槈濞嗘劕纾抽梺鍝勬湰缁嬫垿鍩為幋锕€宸濇い鏇炴噺閳诲﹦绱撻崒娆戝妽妞ゃ劌鎳橀幆宀勫磼閻愰潧绁﹂柟鍏肩暘閸斿矂鎮為崹顐犱簻闁圭儤鍨甸鈺呮倵濮橆剦妲归柕鍥у瀵粙濡歌閸c儳绱撴担绛嬪殭婵☆偅绻堝濠氭偄绾拌鲸鏅i悷婊冪Ч閹﹢鎳犻鍌滐紲闁哄鐗勯崝搴g不閻愮儤鐓涢悘鐐跺Г閸犳﹢鏌℃担鐟板鐎规洜鍠栭、姗€鎮╅搹顐ら拻闂傚倷娴囧畷鍨叏閹惰姤鈷旂€广儱顦崹鍌炴煢濡尨绱氶柨婵嗩槸缁€瀣亜閺嶃劎鈽夋繛鍫熺矒濮婅櫣娑甸崨顔俱€愬銈庡亝濞茬喖宕洪埀顒併亜閹哄棗浜鹃梺鎸庢穿婵″洤危閹版澘绫嶉柛顐g箘椤撴椽姊虹紒妯哄鐎殿噮鍓欒灃闁告侗鍠氶崢鎼佹⒑閸撴彃浜介柛瀣閹﹢鏁冮崒娑氬幈闁诲函缍嗛崑鍡樻櫠椤掑倻纾奸柛灞剧☉缁椦囨煙閻熸澘顏柟鐓庢贡閹叉挳宕熼棃娑欐珡闂傚倸鍊风粈渚€骞栭銈傚亾濮樺崬鍘寸€规洖缍婇弻鍡楊吋閸涱垽绱遍柣搴$畭閸庨亶藝娴兼潙纾跨€广儱顦伴悡鏇㈡煛閸ャ儱濡煎褜鍨伴湁闁绘ǹ绉鍫熺畳闂備焦瀵х换鍌毼涘Δ鍛厺闁哄洢鍨洪悡鍐喐濠婂牆绀堟慨妯挎硾閽冪喖鏌曟繛褍瀚烽崑銊╂⒑缂佹ê濮囨い鏇ㄥ弮閸┿垽寮撮姀鈥斥偓鐢告煥濠靛棗鈧懓鈻嶉崶銊d簻闊洦绋愰幉楣冩煛鐏炵偓绀嬬€规洟浜堕、姗€鎮㈡總澶夌处