using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace 管道通信
{
public partial class FrmMain : Form
{
/// <summary>
/// 系统消息列表
/// </summary>
List<SysMessage> _sysMessages = new List<SysMessage>();
/// <summary>
/// 服务端管道
/// </summary>
private NamedPipeServerStream _serverStream;
/// <summary>
/// 客户端管道
/// </summary>
private NamedPipeClientStream _clientStream;
/// <summary>
/// 服务端读取数据线程
/// </summary>
private Thread _serverThread;
public FrmMain()
{
InitializeComponent();
_serverThread = new Thread(new ThreadStart(ServerReadThread));
dataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
PushMessage("skdfjksjfksjfksjkfjskdfjksjfklsjfkjsklfjskljfk");
}
/// <summary>
/// 压入消息
/// </summary>
/// <param name="message"></param>
void PushMessage(string message)
{
_sysMessages.Add(new SysMessage(message));
}
/// <summary>
/// 服务器读取数据线程
/// </summary>
private void ServerReadThread()
{
while (true)
{
try
{
var buf = new byte[1024];
if (!_serverStream.IsConnected)
{
_serverStream.WaitForConnection();
}
var sr = new StreamReader(_serverStream);
var recData = sr.ReadLine();
ShowMessage("收到数据:"+recData);
if (recData == "Exit")
{
// Log.WriteLog("Pipe Exit.", _logFile);
Debug.WriteLine(recData);
// ExitApplication();
}
}
catch (Exception ex)
{
break;
ShowMessage(ex.Message);
}
Thread.Sleep(200);
}
}
private void button1_Click(object sender, EventArgs e)
{
if (_serverStream != null) return;
_serverStream = new NamedPipeServerStream("pipe_xg",PipeDirection.InOut);
_serverThread.Start();
ShowMessage("管道建立成功!");
}
private void button2_Click(object sender, EventArgs e)
{
try
{
_clientStream = new NamedPipeClientStream("pipe_xg");
ShowMessage("打开建立成功");
}
catch (Exception ex)
{
ShowMessage(ex.Message);
}
}
delegate void DShowMessage(string msg);
/// <summary>
/// 显示信息
/// </summary>
/// <param name="msg"></param>
void ShowMessage(string msg)
{
PushMessage(msg);
if (InvokeRequired)
{
Invoke(new DShowMessage(ShowMessage), new object[] {msg});
return;
}
dataGridView1.DataSource = new List<NamedPipeServerStream> { _serverStream }.Select(obj => new
{
//CanRead = obj.CanRead,
//TransmissionMode = obj.TransmissionMode,
//WriteTimeout = obj.WriteTimeout,
连接状态 = obj.IsConnected,
//Position = obj.Position,
//ReadMode = obj.ReadMode,
}).ToList();
label1.Text = msg;
}
/// <summary>
/// 关闭清理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (_serverThread != null) _serverThread.Abort();
if (_serverStream != null) _serverStream.Close();
if (_clientStream != null) _clientStream.Close();
}
/// <summary>
/// 发送数据按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
if (_clientStream != null)
{
if(!_clientStream.IsConnected)
_clientStream.Connect();
if (_clientStream.IsConnected)
{
var data = DateTime.Now.ToString(CultureInfo.InvariantCulture);
var writer = new StreamWriter(_clientStream);
writer.WriteLine(data);
writer.Flush();
//writer.Close();
}
}
}
private void button4_Click(object sender, EventArgs e)
{
if (_clientStream != null) _clientStream.Close();
ShowMessage("客户端连接断开");
}
/// <summary>
/// 系统时钟,更新消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
dataGridView2.DataSource = _sysMessages.Select(obj => new
{
消息索引 = obj.Index,
内容 = obj.Content,
时间 = obj.DateTime.ToString(CultureInfo.InvariantCulture),
}).ToList();
}
}
}