C# 管道通信 服务器

2 篇文章 0 订阅
2 篇文章 0 订阅



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();
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值