命名管道接收监听代码的问题

问题描述

privatevoidWaitForConnectionCallBack(IAsyncResultiar){try{//GetthepipeNamedPipeServerStreampipeServer=(NamedPipeServerStream)iar.AsyncState;//EndwaitingfortheconnectionpipeServer.EndWaitForConnection(iar);byte[]buffer=newbyte[255];//ReadtheincomingmessagepipeServer.Read(buffer,0,255);//ConvertbytebuffertostringstringstringData=Encoding.UTF8.GetString(buffer,0,buffer.Length);Debug.WriteLine(stringData+Environment.NewLine);//PassmessagebacktocallingformPipeMessage.Invoke(stringData);//KilloriginalseverandcreatenewwaitserverpipeServer.Close();pipeServer=null;pipeServer=newNamedPipeServerStream(_pipeName,PipeDirection.In,1,PipeTransmissionMode.Byte,PipeOptions.Asynchronous);//Recursivelywaitfortheconnectionagainandagain....pipeServer.BeginWaitForConnection(newAsyncCallback(WaitForConnectionCallBack),pipeServer);}catch{return;}下面的代码是什么意思,为什么要杀死,再新建呢?我有程序(想参考这个代码)要连续运行,一秒接收3次数据,要运行一个小时,或更长。会不会有性能的问题?源码链接http://www.codeproject.com/Tips/492231/Csharp-Async-Named-Pipes//KilloriginalseverandcreatenewwaitserverpipeServer.Close();pipeServer=null;pipeServer=newNamedPipeServerStream(_pipeName,PipeDirection.In,1,PipeTransmissionMode.Byte,PipeOptions.Asynchronous);//Recursivelywaitfortheconnectionagainandagain....pipeServer.BeginWaitForConnection(newAsyncCallback(WaitForConnectionCallBack),pipeServer);

解决方案

解决方案二:
没有人回呢,自己顶!
解决方案三:
没有人回呢,自己顶!

时间: 2024-11-10 07:08:37

命名管道接收监听代码的问题的相关文章

在.NET中使用命名管道完成进程间通信

进程 你曾经需要在同一台机器的两个.NET应用程序间进行数据交换吗?例如,一个Web站点和一个Windows服务?.NET框架提供了几种好的选择来完成进程间通信(IPC):Web Service,Remoting.最快的是Remoting,因为它使用TCP通道和二进制格式. 然而,如果需要频繁地从一个应用程序调用另外一个应用程序,并且你主要关心的是性能,Remoting还是显得慢了一点.让Remoting变慢的,不是协议,而是序列化. 通常来说,Remoting是很不错的,但如果仅限于本地机器的

VC命名管道通信的实现

无论是sqlserver的用户,还是pb的用户,作为c/s结构开发环境,他们在网络通信的实现上,都有一种共同的方法--命名管道.由于当前操作系统的不惟一性,各个系统都有其独自的通信协议,导致了不同系统间通信的困难.尽管tcp/ip协议目前已发展成为internet的标准,但仍不能保证c/s应用程序的顺利进行.命名管道作为一种通信方法,有其独特的优越性,这主要表现在它不完全依赖于某一种协议,而是适用于任何协议--只要能够实现通信. 命名管道具有很好的使用灵活性,表现在: 1) 既可用于本地,又可用

Linux进程间通信——使用命名管道

在前一篇文章--Linux进程间通信--使用匿名管道中,我们看到了如何使用匿名管道来在进程之间传递数据,同时也看到了这个方式的一个缺陷,就是这些进程都由一个共同的祖先进程启动,这给我们在不相关的的进程之间交换数据带来了不方便.这里将会介绍进程的另一种通信方式--命名管道,来解决不相关进程间的通信问题.   一.什么是命名管道 命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和之前所讲的没有名字的管道(匿名管道)类似.   由于Linux中所有

重叠 命名管道-windows 重叠IO 命名管道程序疑问?

问题描述 windows 重叠IO 命名管道程序疑问? 我写了一个命名管道通信例子,但是现在有两个疑问? 疑问1 : 为什么我的程序只能由客户端向服务器发送数据,服务端不能向客户端发送数据呢?服务端显示发送成功,但是客户端相应的可读事件不能被触发. 疑问2 : 偶尔出现客户端向服务器发送数据的时候 前一两个包丢失. 服务端代码: #include "stdafx.h" #include <windows.h> #include <stdio.h> #includ

C#命名管道通信

原文:C#命名管道通信 C#命名管道通信 最近项目中要用c#进程间通信,以前常见的方法包括RMI.发消息等.但在Windows下面发消息需要有窗口,我们的程序是一个后台运行程序,发消息不试用.RMI又用的太多了,准备用管道通信来做消息通信. 管道通信以前在大学学过,包括匿名管道和命名管道.匿名管道只能用在父子进程之间:命名管道可以用在两个进程甚至跨服务器通信.这里给出命名管道的示例. 服务器端代码 private static void WaitData() { using (NamedPipe

C#中使用命名管道进行进程通信的实例

原文:C#中使用命名管道进行进程通信的实例 1 新建解决方案NamedPipeExample 在解决方案下面新建两个项目:Client和Server,两者的输出类型均为"Windows 应用程序".整个程序的结构如下图所示.     2 实现项目Client Client仅包含一个名为"客户端"的窗体,如下图所示.   编写窗体后端代码,如下所示. using System; using System.IO; using System.IO.Pipes; using

命名管道的一些疑问

问题描述 大家好,我第一次使用命名管道NamedPipeServerStream,有些地方不是太明白.我原以为实例化一个管道后,他就可以像socket一样,一直进行监听.但发现好像是他用完了之后,这个管道就整个被回收了,如果还要继续通信的话,必须再实例化一个管道.是这样的吗?如果想实现这种类似于socket的功能,是不是我必须要不停的实例化管道呢? 解决方案 解决方案二:怎么用完?解决方案三:我建议你用wcf,并且使用pipe协议,这样可以避免和底层的操作系统打交道.解决方案四:如果你看msdn

在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)

error|server|程序 错误:"在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) ",       上述错误我遇到两种情况,一种是在打开打开SQL Server 2005时弹出的,另一种是在应用程序连接SQL Server 2005时出现的.归纳了一下,由以下几个原因: 1.数据库引擎没有启动.  

使用命名管道访问SQL Server

一.意义 SQL Server安装后缺省配置是允许客户端以TCP/IP协议来访问,用户只需要知道SQL Server账号的密码就可以访问,这样很不安全,因为很多WEB程序是直接把连接信息(数据库服务器.连接账号.连接密码)写在程序里面的,破坏者或黑客可以通过某些方法直接查看源代码获取SQL Server账号及密码,他们就可以直接用TCP/IP协议连接到该数据库服务器,对数据或配置进行修改甚至作破坏.使用命名管道时用户必须得具有访问SQL Server所在机器的资源以后才有可能访问SQL Serv