WinForm之TCP服务端

目录

一 原型

二 源码


一 原型

二 源码

using System.Net;
using System.Net.Sockets;
using System.Text;

namespace TCP网络服务端通讯
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        TcpListener listener = null;
        TcpClient handler = null;
        NetworkStream stream = null;
        bool isrun = false;

        private void openServer_Click(object sender, EventArgs e)
        {

            if (IP.Text.Trim().Length < 9 && Port.Text.Trim().Length == 0)
            {
                MessageBox.Show("IP和端口无效");
                return;
            }
            listener = new TcpListener(IPAddress.Parse(IP.Text), int.Parse(Port.Text));
            listener.Start();
            isrun = true;
        }

        private void send_Click(object sender, EventArgs e)
        {
            if (stream != null)
            {
                byte[] buffer = Encoding.UTF8.GetBytes(log.Text);
                stream.Write(buffer, 0, buffer.Length);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            IP.Text = "127.0.0.1";
            Port.Text = "9800";
            try
            {

                Task.Run(() =>
                {
                    while (true)
                    {
                        if (isrun && listener != null)
                        {
                            handler = listener.AcceptTcpClient();
                            stream = handler.GetStream();
                            byte[] buffer = new byte[1024];

                            if (stream != null)
                            {
                                stream.Read(buffer, 0, buffer.Length);
                                this.BeginInvoke(new Action(() =>
                                {
                                    log.Text = Encoding.UTF8.GetString(buffer);
                                }));
                            }
                        }
                        Thread.Sleep(50);
                    }
                });
            }
            catch (Exception)
            {

            }

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            isrun = false;
            if (listener != null)
            {
                listener.Stop();
            }

        }
    }
}

设计器自动生成代码:

namespace TCP网络服务端通讯
{
    partial class Form1
    {
        /// <summary>
        ///  Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        ///  Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        ///  Required method for Designer support - do not modify
        ///  the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            label1 = new Label();
            label2 = new Label();
            IP = new TextBox();
            Port = new TextBox();
            openServer = new Button();
            log = new RichTextBox();
            send = new Button();
            SuspendLayout();
            // 
            // label1
            // 
            label1.AutoSize = true;
            label1.Location = new Point(42, 52);
            label1.Name = "label1";
            label1.Size = new Size(22, 20);
            label1.TabIndex = 0;
            label1.Text = "IP";
            // 
            // label2
            // 
            label2.AutoSize = true;
            label2.Location = new Point(42, 102);
            label2.Name = "label2";
            label2.Size = new Size(39, 20);
            label2.TabIndex = 1;
            label2.Text = "端口";
            // 
            // IP
            // 
            IP.Location = new Point(111, 52);
            IP.Name = "IP";
            IP.Size = new Size(291, 27);
            IP.TabIndex = 2;
            // 
            // Port
            // 
            Port.Location = new Point(111, 102);
            Port.Name = "Port";
            Port.Size = new Size(291, 27);
            Port.TabIndex = 3;
            // 
            // openServer
            // 
            openServer.Location = new Point(42, 173);
            openServer.Name = "openServer";
            openServer.Size = new Size(360, 29);
            openServer.TabIndex = 4;
            openServer.Text = "打开服务器";
            openServer.UseVisualStyleBackColor = true;
            openServer.Click += openServer_Click;
            // 
            // log
            // 
            log.Location = new Point(42, 224);
            log.Name = "log";
            log.Size = new Size(360, 238);
            log.TabIndex = 5;
            log.Text = "";
            // 
            // send
            // 
            send.Location = new Point(42, 468);
            send.Name = "send";
            send.Size = new Size(360, 29);
            send.TabIndex = 6;
            send.Text = "发送";
            send.UseVisualStyleBackColor = true;
            send.Click += send_Click;
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(9F, 20F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(414, 516);
            Controls.Add(send);
            Controls.Add(log);
            Controls.Add(openServer);
            Controls.Add(Port);
            Controls.Add(IP);
            Controls.Add(label2);
            Controls.Add(label1);
            MaximizeBox = false;
            Name = "Form1";
            Text = "TCP服务端";
            FormClosing += Form1_FormClosing;
            Load += Form1_Load;
            ResumeLayout(false);
            PerformLayout();
        }

        #endregion

        private Label label1;
        private Label label2;
        private TextBox IP;
        private TextBox Port;
        private Button openServer;
        private RichTextBox log;
        private Button send;
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Modbus TCP 是一种基于 TCP/IP 协议的 Modbus 应用协议的变体,它使用标准的短报文形式来传递 Modbus 通信。在 Winform 中实现 Modbus TCP 服务端,需要以下步骤: 1. 引入 Modbus TCP 库 在 Winform 项目中引入 Modbus TCP 库,可以选择 Modbus TCP Slave Library 或者 NModbus TCP Library。 2. 创建 Modbus TCP 服务端 使用库中提供的类创建 Modbus TCP 服务端,并指定监听端口。 ```csharp // Modbus TCP Slave Library TcpListener slaveTcpListener = new TcpListener(IPAddress.Any, 502); ModbusTcpSlave slave = new ModbusTcpSlave(1, slaveTcpListener); // NModbus TCP Library TcpListener slaveTcpListener = new TcpListener(IPAddress.Any, 502); ModbusFactory factory = new ModbusFactory(); IModbusSlaveNetwork network = factory.CreateSlaveNetwork(slaveTcpListener); IModbusSlave slave = factory.CreateSlave(1); network.AddSlave(slave); ``` 3. 添加 Modbus 数据点 使用库中提供的类创建 Modbus 数据点,并将其添加到服务端中。 ```csharp // Modbus TCP Slave Library ModbusTcpDataPoint<int> dataPoint1 = new ModbusTcpDataPoint<int>(ModbusTcpDataType.INT16, 0); slave.DataStore.AddDataPoint(dataPoint1); // NModbus TCP Library ushort[] data1 = new ushort[] { 0 }; InputRegister[] inputRegisters1 = InputRegister.CreateArray(data1); slave.DataStore.InputRegisters.WriteRange(0, inputRegisters1); ``` 4. 启动 Modbus TCP 服务端 ```csharp // Modbus TCP Slave Library slaveTcpListener.Start(); slave.Start(); // NModbus TCP Library slaveTcpListener.Start(); network.Listen(); ``` 5. 处理 Modbus TCP 请求 在 Winform 中,可以使用后台线程来处理 Modbus TCP 请求,以确保 UI 界面的响应性能。 ```csharp // Modbus TCP Slave Library Task.Run(() => { while (true) { if (slaveTcpListener.Pending()) { TcpClient client = slaveTcpListener.AcceptTcpClient(); ModbusTcpSlaveConnection connection = new ModbusTcpSlaveConnection(client); slave.AddConnection(connection); } Thread.Sleep(10); } }); // NModbus TCP Library Task.Run(() => { while (true) { if (slaveTcpListener.Pending()) { TcpClient client = slaveTcpListener.AcceptTcpClient(); IModbusSlaveConnection connection = factory.CreateSlaveConnection(client); network.AddSlaveConnection(connection); } Thread.Sleep(10); } }); ``` 以上是 Winform 中实现 Modbus TCP 服务端的基本步骤,具体实现还需要根据项目中的具体需求进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值