udp_server_c#_与串口间的数据转发

程序功能: UDP服务器--转发串口数据
使用方法:1 打开串口            点击按钮就可
          2 开启UDP服务端       点击按钮就可
          3 根据显示的IP和端口,使用客户端连接到本服务器。
          4 大功告成,串口与UDP客户端能够收发数据了
编译方法:
    1 创建c#窗体应用程序,名字:Comx_UdpServer
    2 在工程目录下新建 udpServer.cs 并添加到工程
    3 复制udpServer.cs 的内容到 udpServer.cs
    4 复制Form1.cs 的内容到 Form1.cs
    5 复制Form1.Designer.cs 的内容到 Form1.Designer.cs
    编译即可
环境:VS2008
编者:张永辉 2013年3月20日
文件:
    Form1.cs
    udpServer.cs
    Program.cs
    Form1.Designer.cs
待改进:1时间轮询是1MS
        2现象1:串口发送1234567890 客户端第一次收到1, 下次收到234567890。
        出现概率:1/14
        3 收发数据不能太快。也够调试用
修改:弥补上上述问题
        1 时间轮询是1MS
        2 不再出现收不到整包的问题了。问题在串口接收函数
        3 本服务器使用固定端口 60010

//****************************************************************************************
//Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using Udp_Server;
namespace Comx_UdpServer
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    //载入窗体
    private void Form1_Load(object sender, EventArgs e)
    {
        int a = 1;
        //默认显示COMX 和 波特率
        for (a = 1; a < 20;a++ )
        {
            comboBox_comx.Items.Add("COM" + a.ToString());
        }
        comboBox_baudrate.Items.Add("1200");
        comboBox_baudrate.Items.Add("2400");
        comboBox_baudrate.Items.Add("4800");
        comboBox_baudrate.Items.Add("9600");
        comboBox_baudrate.Items.Add("19200");
        comboBox_baudrate.Items.Add("38400");
        comboBox_baudrate.Items.Add("57600");
        comboBox_baudrate.Items.Add("115200");

        //默认显示的IP 和 port
        listBox_hostip.Items.Clear();
        listBox_hostip.Items.Add("0.0.0.0");
        listBox_hostport.Items.Clear();
        listBox_hostport.Items.Add("0");

        label_clientIPport.Text = "点击显示当前客户端";

        //主机IP和端口 由程序写,用户不能改变
        listBox_hostip.Enabled = false;
        listBox_hostport.Enabled = false;

        //开启UDP服务
        udps = new udpserver();

        //创建服务线程,功能:在串口和UDP之间传递数据
        UdpServerThread = new Thread(new ThreadStart(UdpServerMain));
        UdpServerThread.Priority = ThreadPriority.Lowest;
        UdpServerThread.Start();
        Thread.Sleep(1);                            //主线程休眠1MS,会去执行oThread
        while (!UdpServerThread.IsAlive) ;          //等待oThread启动
    }
    //关闭窗体事件
    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        //关闭串口
        serialPort.Close();
        //关闭UDP服务
        udps.udpserverClose();
        //关闭线程
        UdpServerThread.Abort();            //终止oThread线程.其执行后果是Thread.Start()也不能启动oThread了。
        UdpServerThread.Join();             //使主线程等待,直到oThread结束. 此处待改进,需要收到数据才会真正退出
    }
    //*************************************串口相关*******************************************
    //【按钮】  打开/关闭串口
    private void button_OpenCOM_Click(object sender, EventArgs e)
    {
        //获取当前波特率
        string baud = comboBox_baudrate.Text;
        serialPort.BaudRate = Convert.ToInt32(baud.Trim());     //若baud非纯数组,会抛异常
        int bd = serialPort.BaudRate;
        //-------------关闭串口---------------------------------------------
        if (serialPort.IsOpen)
        {
            serialPort.Close();
            button_OpenCOM.Text = "打开串口";
            comboBox_baudrate.Enabled = true;
            comboBox_comx.Enabled = true;
            //MessageBox.Show("已经关闭:" + comboBox_comx.Text + ":" + bd.ToString());
            radioButton_uart.Text = "已关闭";
            radioButton_uart.Checked = false;
        }
        else
        {
            //------------打开串口----------------------------------------------
            try
            {
                //获取串口名
                serialPort.PortName = comboBox_comx.Text;
                serialPort.Open();
                button_OpenCOM.Text = "关闭串口";
                comboBox_baudrate.Enabled = false;
                comboBox_comx.Enabled = false;
                //MessageBox.Show("打开成功:" + comboBox_comx.Text + ":" + bd.ToString());
                radioButton_uart.Text = "已开启";
                radioButton_uart.Checked = true;
            }
            catch (Exception ee)
            {
                //打开失败的情况
                ee.GetType();
                button_OpenCOM.Text = "打开串口";
                comboBox_baudrate.Enabled = true;
                comboBox_comx.Enabled = true;
                MessageBox.Show("打开失败:" + comboBox_comx.Text + ":" + bd.ToString());
                radioButton_uart.Text = "已关闭";
                radioButton_uart.Checked = false;
            }
        }
        if(isudpserver_on == true && serialPort.IsOpen)
        {
            label6.Text = "--连接成功--";
        }else
        {
            label6.Text = "---未连接---";
        }
    }
    public int usartRevData(byte[] revdata, int len)
    {
        int unm = 0;
        if (serialPort.IsOpen == false)
        {
            return 0;
        }
        serialPort.ReadTimeout = 10;                    //接收超时1MS
        try
        {   //缓冲区有多少字节可以读取,有数据才去读取   原来的方法保留
            /*unm = serialPort.BytesToRead;
            len = (unm < len) ? (unm) : (len);
            if (unm>0)
            {   unm = serialPort.Read(revdata, 0, len); }*/

            int cnt = 0;
            unm = 0;
            while (true)
            {   //没有可以读取的则退出
                cnt = serialPort.BytesToRead;
                if (cnt<=0)
                {
                    break;
                }
                //使用最小空间储存
                cnt = (len > cnt) ? (cnt) : (len);
                //revdata存数据 unm存个数
                cnt = serialPort.Read(revdata, unm, cnt);
                unm += cnt;
                //计算剩余空间长度
                len = len - cnt;
                if (len<=0)
                {
                    break;
                }
                //等待未接收完的数据就绪
                int t = 4 * 10 * 1000 / BaudRate;   //接收4个数据的时间
                Thread.Sleep(t + 1);                //多给1毫秒
            }
            //实验:之前没有使用serialPort.BytesToRead函数,利用当没有数据可读时serialPort.Read()抛出异常
            //作为没有数据的依据。 会出现一个现象:有1/10的机会收不到一个完整的数据,下次接收上次未接收的数据。
        }
        catch (Exception e)
        {
            //没有读到数据
            //MessageBox.Show(e.Message);
            e.GetType();
            unm = 0;
        }
        return unm;
    }
    //*************************************UDP 相关*******************************************
    //【按钮】 显示当前连接到服务器的 客户端
    private void label_clientIPport_Click(object sender, EventArgs e)
    {
        if (udps.ClientIp == "0.0.0.0:0")
        {
            label_clientIPport.Text = "当前客户端:无客户端连接到此";
        }
        else
        {
            label_clientIPport.Text = "当前客户端:" + udps.ClientIp;
        }
    }
    //【按钮】  开启/关闭Udp服务
    private void button_UdpservOpen_Click(object sender, EventArgs e)
    {
        if (isudpserver_on == true)
        {
            //关闭UDP服务
            button_UdpservOpen.Text = "启动UDP服务";
            isudpserver_on = false;
            radioButton_udp.Text = "已关闭";
            radioButton_udp.Checked = false;
        }
        else
        {
            //开启UDP服务
            button_UdpservOpen.Text = "关闭UDP服务";

            listBox_hostip.Items.Clear();
            listBox_hostip.Items.Add(udps.HostIp);
            listBox_hostport.Items.Clear();
            listBox_hostport.Items.Add(udps.HostpPort);
            isudpserver_on = true;
            radioButton_udp.Text = "已开启";
            radioButton_udp.Checked = true;
         }
        if (isudpserver_on == true && serialPort.IsOpen)
        {
            label6.Text = "--连接成功--";
        }
        else
        {
            label6.Text = "---未连接---";
        }
    }
    //udp服务线程  进行双向数据传递
    udpserver udps;                         //udp服务
    bool isudpserver_on = false;            //服务状态
    Thread UdpServerThread;                 //服务的线程
    byte[] UdpToUart = new byte[2048];      //缓冲器
    byte[] UartToUdp = new byte[2048];      //缓冲器
    void UdpServerMain()
    {
        int unm;
        while (true)
        {
            Thread.Sleep(1);
            //两个端口都开启才进行数据传递
            if (isudpserver_on == false || serialPort.IsOpen == false)
            {
                Thread.Sleep(100);
                //虽然界面没有打开,事实上已经打开了的
                usartRevData(UartToUdp, 2048);
                udps.udpserverRecv(UdpToUart, 2048);
                continue;
            }
            //数据流向:UDP数据-->-->--UART端口
            unm = udps.udpserverRecv(UdpToUart,2048);
            if (unm > 0)
            {
                serialPort.Write(UdpToUart, 0, unm);
            }
            //数据流向:UART数据-->-->--UDP端口
            unm = usartRevData(UartToUdp, 2048);
            if (unm>0)
            {
                //没有客户连接到服务器时不能发送数据到客户
                if (udps.ClientIp != "0.0.0.0:0")
                {
                    udps.udpserverSend(UartToUdp, unm);
                }
            }
        }
    }
}
}
//****************************************************************************************
//udpServer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;             //使用Thread类来创建和控制线程
using System.Net;
using System.Net.Sockets;
namespace Udp_Server
{
    //udp服务端
    class udpserver
    {
        //------------------------服务端相关定义-------------------------
        string hostName;            //主机名
        string hostipaddr;          //主机IP
        int hostport;               //将使用的端口
        IPEndPoint  ipep;
        Socket newsock;
        public string HostName       //主机属性
        {   get{ return hostName;}
        }
        public string HostIp
        {   get{   return hostipaddr; }
        }
        public int HostpPort
        {
            get { return hostport; }
        }
        //------------------客户端相关定义----------------------------------
        IPEndPoint sender;          //客户端IP
        EndPoint Remote;            //客户端端口
        public string ClientIp      //客户属性。 有客服连接时才有
        {
            get{ return Remote.ToString();}
        }
        public string ClientPort
        {
            get { return Remote.ToString(); }
        }
        //构造函数
        public udpserver()
        {
            hostName = Dns.GetHostName();   //本机名
            System.Net.IPAddress[] addressList = Dns.GetHostAddresses(hostName);//会返回所有地址,包括IPv4和IPv6
            hostipaddr = addressList[1].ToString();                     //得到本机IP
            hostport = 60010;               //使用固定端口

            ipep = new IPEndPoint(addressList[1], hostport);            //设置UCP端口号
            newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            newsock.Bind(ipep);                                         //绑定网络地址

            //得到客户机IP和端口  此处是所有IP,所以立即得到0.0.0.0
            sender = new IPEndPoint(IPAddress.Any, 0);
            Remote = (EndPoint)(sender);
        }
        //关闭串口
        public void udpserverClose()
        {
            newsock.Close();
        }
        //接收数据
        //返回:int :收到的数据个数   Recvdata:收到的数据
        public int udpserverRecv(byte[] Recvdata, int maxnum)
        {
            int recvnum = 0;
            //int recvnumall = 0;
            //收到的数据个数
            if (newsock.Poll(50, SelectMode.SelectRead))
            {
                recvnum = newsock.ReceiveFrom(Recvdata, maxnum, 0, ref Remote);    //真正的等待在此
            }
            if (recvnum < 0)
            {
                recvnum = 0;
            }
            return recvnum;
        }
        //发送数据
        //参数:Senddata:数组数据  SendNum:数据个数
        public void udpserverSend(byte[] Senddata,int SendNum)
        {
            newsock.SendTo(Senddata, SendNum, SocketFlags.None, Remote);
        }
    }
}
//****************************************************************************************
//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Comx_UdpServer
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
//****************************************************************************************
//Form1.Designer.cs
namespace Comx_UdpServer
{
partial class Form1
{
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.IContainer components = null;
    /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }
    #region Windows 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要
    /// 使用代码编辑器修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.components = new System.ComponentModel.Container();
    this.label1 = new System.Windows.Forms.Label();
    this.comboBox_comx = new System.Windows.Forms.ComboBox();
    this.label_baudrate = new System.Windows.Forms.Label();
    this.comboBox_baudrate = new System.Windows.Forms.ComboBox();
    this.serialPort = new System.IO.Ports.SerialPort(this.components);
    this.label2 = new System.Windows.Forms.Label();
    this.label3 = new System.Windows.Forms.Label();
    this.label4 = new System.Windows.Forms.Label();
    this.button_OpenCOM = new System.Windows.Forms.Button();
    this.button_UdpservOpen = new System.Windows.Forms.Button();
    this.label_Hostip = new System.Windows.Forms.Label();
    this.label5 = new System.Windows.Forms.Label();
    this.listBox_hostip = new System.Windows.Forms.ListBox();
    this.listBox_hostport = new System.Windows.Forms.ListBox();
    this.label_clientIPport = new System.Windows.Forms.Label();
    this.groupBox_comx = new System.Windows.Forms.GroupBox();
    this.groupBox1 = new System.Windows.Forms.GroupBox();
    this.label6 = new System.Windows.Forms.Label();
    this.radioButton_udp = new System.Windows.Forms.RadioButton();
    this.radioButton_uart = new System.Windows.Forms.RadioButton();
    this.label7 = new System.Windows.Forms.Label();
    this.label8 = new System.Windows.Forms.Label();
    this.label9 = new System.Windows.Forms.Label();
    this.label10 = new System.Windows.Forms.Label();
    this.label11 = new System.Windows.Forms.Label();
    this.groupBox_comx.SuspendLayout();
    this.groupBox1.SuspendLayout();
    this.SuspendLayout();
    // label1
    this.label1.AutoSize = true;
    this.label1.Location = new System.Drawing.Point(23, 28);
    this.label1.Name = "label1";
    this.label1.Size = new System.Drawing.Size(29, 12);
    this.label1.TabIndex = 0;
    this.label1.Text = "串口";
    // comboBox_comx
    this.comboBox_comx.FormattingEnabled = true;
    this.comboBox_comx.Location = new System.Drawing.Point(77, 25);
    this.comboBox_comx.Name = "comboBox_comx";
    this.comboBox_comx.Size = new System.Drawing.Size(69, 20);
    this.comboBox_comx.TabIndex = 2;
    this.comboBox_comx.Text = "COM1";
    // label_baudrate
    this.label_baudrate.AutoSize = true;
    this.label_baudrate.Location = new System.Drawing.Point(23, 69);
    this.label_baudrate.Name = "label_baudrate";
    this.label_baudrate.Size = new System.Drawing.Size(41, 12);
    this.label_baudrate.TabIndex = 3;
    this.label_baudrate.Text = "波特率";
    // comboBox_baudrate
    this.comboBox_baudrate.FormattingEnabled = true;
    this.comboBox_baudrate.Location = new System.Drawing.Point(77, 61);
    this.comboBox_baudrate.Name = "comboBox_baudrate";
    this.comboBox_baudrate.Size = new System.Drawing.Size(69, 20);
    this.comboBox_baudrate.TabIndex = 4;
    this.comboBox_baudrate.Text = "9600";
    // label2
    this.label2.AutoSize = true;
    this.label2.Location = new System.Drawing.Point(75, 98);
    this.label2.Name = "label2";
    this.label2.Size = new System.Drawing.Size(53, 12);
    this.label2.TabIndex = 5;
    this.label2.Text = "8bit数据";
    // label3
    this.label3.AutoSize = true;
    this.label3.Location = new System.Drawing.Point(75, 124);
    this.label3.Name = "label3";
    this.label3.Size = new System.Drawing.Size(71, 12);
    this.label3.TabIndex = 6;
    this.label3.Text = "1bit 停止位";
    // label4
    this.label4.AutoSize = true;
    this.label4.Location = new System.Drawing.Point(75, 149);
    this.label4.Name = "label4";
    this.label4.Size = new System.Drawing.Size(41, 12);
    this.label4.TabIndex = 7;
    this.label4.Text = "无校验";
    // button_OpenCOM
    this.button_OpenCOM.BackColor = System.Drawing.SystemColors.Control;
    this.button_OpenCOM.Location = new System.Drawing.Point(25, 205);
    this.button_OpenCOM.Name = "button_OpenCOM";
    this.button_OpenCOM.Size = new System.Drawing.Size(121, 23);
    this.button_OpenCOM.TabIndex = 8;
    this.button_OpenCOM.Text = "打开";
    this.button_OpenCOM.UseVisualStyleBackColor = false;
    this.button_OpenCOM.Click += new System.EventHandler(this.button_OpenCOM_Click);
    // button_UdpservOpen
    this.button_UdpservOpen.Location = new System.Drawing.Point(23, 200);
    this.button_UdpservOpen.Name = "button_UdpservOpen";
    this.button_UdpservOpen.Size = new System.Drawing.Size(184, 23);
    this.button_UdpservOpen.TabIndex = 9;
    this.button_UdpservOpen.Text = "开启服务";
    this.button_UdpservOpen.UseVisualStyleBackColor = true;
    this.button_UdpservOpen.Click += new System.EventHandler(this.button_UdpservOpen_Click);
    // label_Hostip
    this.label_Hostip.AutoSize = true;
    this.label_Hostip.Location = new System.Drawing.Point(19, 28);
    this.label_Hostip.Name = "label_Hostip";
    this.label_Hostip.Size = new System.Drawing.Size(53, 12);
    this.label_Hostip.TabIndex = 10;
    this.label_Hostip.Text = "服务器IP";
    // label5
    this.label5.AutoSize = true;
    this.label5.Location = new System.Drawing.Point(21, 69);
    this.label5.Name = "label5";
    this.label5.Size = new System.Drawing.Size(65, 12);
    this.label5.TabIndex = 11;
    this.label5.Text = "服务器Port";
    // listBox_hostip
    this.listBox_hostip.FormattingEnabled = true;
    this.listBox_hostip.ItemHeight = 12;
    this.listBox_hostip.Location = new System.Drawing.Point(93, 28);
    this.listBox_hostip.Name = "listBox_hostip";
    this.listBox_hostip.Size = new System.Drawing.Size(103, 16);
    this.listBox_hostip.TabIndex = 12;
    // listBox_hostport
    this.listBox_hostport.FormattingEnabled = true;
    this.listBox_hostport.ItemHeight = 12;
    this.listBox_hostport.Location = new System.Drawing.Point(93, 69);
    this.listBox_hostport.Name = "listBox_hostport";
    this.listBox_hostport.Size = new System.Drawing.Size(103, 16);
    this.listBox_hostport.TabIndex = 13;
    // label_clientIPport
    this.label_clientIPport.AutoSize = true;
    this.label_clientIPport.Location = new System.Drawing.Point(21, 112);
    this.label_clientIPport.Name = "label_clientIPport";
    this.label_clientIPport.Size = new System.Drawing.Size(65, 12);
    this.label_clientIPport.TabIndex = 14;
    this.label_clientIPport.Text = "无客服连接";
    this.label_clientIPport.Click += new System.EventHandler(this.label_clientIPport_Click);
    // groupBox_comx
    this.groupBox_comx.Controls.Add(this.radioButton_uart);
    this.groupBox_comx.Controls.Add(this.label3);
    this.groupBox_comx.Controls.Add(this.label1);
    this.groupBox_comx.Controls.Add(this.comboBox_comx);
    this.groupBox_comx.Controls.Add(this.label_baudrate);
    this.groupBox_comx.Controls.Add(this.comboBox_baudrate);
    this.groupBox_comx.Controls.Add(this.label2);
    this.groupBox_comx.Controls.Add(this.label4);
    this.groupBox_comx.Controls.Add(this.button_OpenCOM);
    this.groupBox_comx.ForeColor = System.Drawing.SystemColors.MenuText;
    this.groupBox_comx.Location = new System.Drawing.Point(22, 22);
    this.groupBox_comx.Name = "groupBox_comx";
    this.groupBox_comx.Size = new System.Drawing.Size(196, 259);
    this.groupBox_comx.TabIndex = 15;
    this.groupBox_comx.TabStop = false;
    this.groupBox_comx.Text = "串口连接";
    // groupBox1
    this.groupBox1.Controls.Add(this.radioButton_udp);
    this.groupBox1.Controls.Add(this.button_UdpservOpen);
    this.groupBox1.Controls.Add(this.label_Hostip);
    this.groupBox1.Controls.Add(this.label_clientIPport);
    this.groupBox1.Controls.Add(this.label5);
    this.groupBox1.Controls.Add(this.listBox_hostport);
    this.groupBox1.Controls.Add(this.listBox_hostip);
    this.groupBox1.ForeColor = System.Drawing.SystemColors.MenuText;
    this.groupBox1.Location = new System.Drawing.Point(301, 27);
    this.groupBox1.Name = "groupBox1";
    this.groupBox1.Size = new System.Drawing.Size(242, 254);
    this.groupBox1.TabIndex = 16;
    this.groupBox1.TabStop = false;
    this.groupBox1.Text = "Udp服务器";
    // label6
    this.label6.AutoSize = true;
    this.label6.ForeColor = System.Drawing.SystemColors.MenuText;
    this.label6.Location = new System.Drawing.Point(224, 139);
    this.label6.Name = "label6";
    this.label6.Size = new System.Drawing.Size(77, 12);
    this.label6.TabIndex = 17;
    this.label6.Text = "---未连接---";
    // radioButton_udp
    this.radioButton_udp.AutoSize = true;
    this.radioButton_udp.BackColor = System.Drawing.SystemColors.ButtonFace;
    this.radioButton_udp.Location = new System.Drawing.Point(23, 163);
    this.radioButton_udp.Name = "radioButton_udp";
    this.radioButton_udp.Size = new System.Drawing.Size(59, 16);
    this.radioButton_udp.TabIndex = 15;
    this.radioButton_udp.Text = "已关闭";
    this.radioButton_udp.UseVisualStyleBackColor = false;
    // radioButton_uart
    this.radioButton_uart.AutoSize = true;
    this.radioButton_uart.Location = new System.Drawing.Point(25, 168);
    this.radioButton_uart.Name = "radioButton_uart";
    this.radioButton_uart.Size = new System.Drawing.Size(59, 16);
    this.radioButton_uart.TabIndex = 9;
    this.radioButton_uart.TabStop = true;
    this.radioButton_uart.Text = "已关闭";
    this.radioButton_uart.UseVisualStyleBackColor = true;
    // label7
    this.label7.AutoSize = true;
    this.label7.ForeColor = System.Drawing.Color.Green;
    this.label7.Location = new System.Drawing.Point(22, 296);
    this.label7.Name = "label7";
    this.label7.Size = new System.Drawing.Size(171, 19);
    this.label7.TabIndex = 18;
    this.label7.Text = "功    能 :数据双向透明传输";
    this.label7.UseCompatibleTextRendering = true;
    // label8
    this.label8.AutoSize = true;
    this.label8.ForeColor = System.Drawing.Color.Green;
    this.label8.Location = new System.Drawing.Point(22, 319);
    this.label8.Name = "label8";
    this.label8.Size = new System.Drawing.Size(293, 12);
    this.label8.TabIndex = 19;
    this.label8.Text = "传输过程1:CMx收到数据A,Udp再将A发送到他的客户端";
    // label9
    this.label9.AutoSize = true;
    this.label9.ForeColor = System.Drawing.Color.Green;
    this.label9.Location = new System.Drawing.Point(22, 344);
    this.label9.Name = "label9";
    this.label9.Size = new System.Drawing.Size(347, 12);
    this.label9.TabIndex = 20;
    this.label9.Text = "传输过程2:Udp服务器收到来自客户端的数据B,CMx将B发送出去";
    // label10
    this.label10.AutoSize = true;
    this.label10.ForeColor = System.Drawing.Color.MediumSeaGreen;
    this.label10.Location = new System.Drawing.Point(466, 344);
    this.label10.Name = "label10";
    this.label10.Size = new System.Drawing.Size(77, 12);
    this.label10.TabIndex = 21;
    this.label10.Text = "zhangyonghui";
    // label11
    this.label11.AutoSize = true;
    this.label11.Location = new System.Drawing.Point(460, 332);
    this.label11.Name = "label11";
    this.label11.Size = new System.Drawing.Size(83, 12);
    this.label11.TabIndex = 22;
    this.label11.Text = "Free Ver1.0.0";
    // Form1
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(567, 371);
    this.Controls.Add(this.label11);
    this.Controls.Add(this.label10);
    this.Controls.Add(this.label9);
    this.Controls.Add(this.label8);
    this.Controls.Add(this.label7);
    this.Controls.Add(this.label6);
    this.Controls.Add(this.groupBox1);
    this.Controls.Add(this.groupBox_comx);
    this.ForeColor = System.Drawing.Color.DarkBlue;
    this.Name = "Form1";
    this.Text = "串口-UDP服务器数据转发器";
    this.Load += new System.EventHandler(this.Form1_Load);
    this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed);
    this.groupBox_comx.ResumeLayout(false);
    this.groupBox_comx.PerformLayout();
    this.groupBox1.ResumeLayout(false);
    this.groupBox1.PerformLayout();
    this.ResumeLayout(false);
    this.PerformLayout();
    }
    #endregion
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.ComboBox comboBox_comx;
    private System.Windows.Forms.Label label_baudrate;
    private System.Windows.Forms.ComboBox comboBox_baudrate;
    private System.IO.Ports.SerialPort serialPort;
    private System.Windows.Forms.Label label2;
    private System.Windows.Forms.Label label3;
    private System.Windows.Forms.Label label4;
    private System.Windows.Forms.Button button_OpenCOM;
    private System.Windows.Forms.Button button_UdpservOpen;
    private System.Windows.Forms.Label label_Hostip;
    private System.Windows.Forms.Label label5;
    public System.Windows.Forms.ListBox listBox_hostip;
    private System.Windows.Forms.ListBox listBox_hostport;
    private System.Windows.Forms.Label label_clientIPport;
    private System.Windows.Forms.GroupBox groupBox_comx;
    private System.Windows.Forms.GroupBox groupBox1;
    private System.Windows.Forms.Label label6;
    private System.Windows.Forms.RadioButton radioButton_udp;
    private System.Windows.Forms.RadioButton radioButton_uart;
    private System.Windows.Forms.Label label7;
    private System.Windows.Forms.Label label8;
    private System.Windows.Forms.Label label9;
    private System.Windows.Forms.Label label10;
    private System.Windows.Forms.Label label11;
}
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值