扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:戴飞 来源:程序员 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(); } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者