管道通信
来源:互联网 发布:知商金融 红包 编辑:程序博客网 时间:2024/05/16 15:15
服务器
using System;
using System.Collections.Generic;
using System.IO.Pipes;
using System.Linq;
using System.Text;
using System.Threading;
using VisionSystem;
namespace WindowsFormsApplication41
{
public class Main
{
DelegateControl delegateControl = DelegateControl.GetInstance();
Byte[] bytes = new Byte[10];
Char[] chars = new Char[10];
Decoder decoder = Encoding.UTF8.GetDecoder();
UTF8Encoding encoding = new UTF8Encoding();
NamedPipeServerStream pipeStream = new NamedPipeServerStream("messagepipe", PipeDirection.InOut, 1,
PipeTransmissionMode.Message, PipeOptions.None);
bool run = true;
public void Init()
{
pipeStream.WaitForConnection();
}
public void Close()
{
run = false;
pipeStream.Close();
}
public void Send(string message)
{
byte[] bs = encoding.GetBytes(message);
pipeStream.BeginWrite(bs, 0, bs.Length, CallBack, null);
}
private void CallBack(IAsyncResult ir)
{
pipeStream.EndWrite(ir);
pipeStream.Flush();
if (pipeStream.CanRead)
pipeStream.BeginRead(bytes, 0, bytes.Length, WaitMessage, null);
}
private void WaitMessage(IAsyncResult ar)
{
string message = encoding.GetString(bytes);
message = message.Replace("\0", "");
if (message.Contains("@1"))
{
delegateControl.DelegateTextBox("MotionText", message.Replace("@1", "") + "\r\n");
}
else if (message.Contains("@2"))
{
delegateControl.DelegateTextBox("VisionText", message.Replace("@2", "") + "\r\n");
}
pipeStream.EndRead(ar);
//pipeStream.BeginRead(bytes, 0, bytes.Length, WaitMessage, null);
//pipeStream.Flush();
}
}
}
客户端
using System;
using System.Collections.Generic;
using System.IO.Pipes;
using System.Linq;
using System.Text;
using System.Threading;
namespace WindowsFormsApplication41
{
public class Motion
{
Decoder decoder = Encoding.UTF8.GetDecoder();
UTF8Encoding encoding = new UTF8Encoding();
Byte[] bytes = new Byte[10];
Char[] chars = new Char[10];
NamedPipeClientStream pipeStream =
new NamedPipeClientStream(".", "messagepipe", PipeDirection.InOut);
bool run = true;
public void Init()
{
pipeStream.Connect();
pipeStream.ReadMode = PipeTransmissionMode.Message;
if (pipeStream.CanRead)
pipeStream.BeginRead(bytes, 0, bytes.Length, Client, null);
}
public void Close()
{
run = false;
pipeStream.Close();
}
public void Client(IAsyncResult ar)
{
pipeStream.EndRead(ar);
string message=encoding.GetString(bytes);
message = message.Replace("\0", "");
if (message == "@1")
{
Thread.Sleep(1000);
if (pipeStream.CanWrite)
{
byte[] bs = encoding.GetBytes("@1Success");
pipeStream.Flush();
IAsyncResult ir = pipeStream.BeginWrite(bs, 0, bs.Length, null, null);
pipeStream.EndWrite(ir);
}
}
pipeStream.BeginRead(bytes, 0, bytes.Length, Client, null);
pipeStream.Flush();
}
//public void Send()
//{
// byte[] bs = encoding.GetBytes("@1Success");
// if (pipeStream.CanWrite)
// {
// pipeStream.Flush();
// IAsyncResult ir = pipeStream.BeginWrite(bs, 0, bs.Length, null, null);
// pipeStream.EndWrite(ir);
// }
//}
}
}
此为本机同进程内通信,管道的读写为阻塞方式,不能同时读和写。
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信 .
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- 管道通信
- MarkDown Latex公式,矩阵,表格等使用
- C++ 进程间共享内存实现
- Shell脚本执行时报错: /bin/sh^M: bad interpreter: No such file or directory
- Spring Boot 依赖POM
- Spring 利用logback输出打印日志:
- 管道通信
- 内部人士揭秘:美国退出教科文组织,可不只不想交钱这么简单
- Linux vdso的由来
- SSLContext 去除证书验证
- int a[60][250][1000]数组的遍历
- Mac环境下VMware Fusion虚拟机虚拟网卡的配置
- linux文件系统详解
- 2>&1 的用法说明。
- Struts2简单开发流程