首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# udp发送控制指令,该怎么解决

2013-07-25 
c# udp发送控制指令我现在有一个串口采集的程序,是c#的,我现在想做一个程序,通过udp发送指令来控制这个采

c# udp发送控制指令
我现在有一个串口采集的程序,是c#的,我现在想做一个程序,通过udp发送指令来控制这个采集的程序,我现在的思路是在这个采集程序里加一个监听端口的线程,请问该怎么加呢,另外就是怎么控制这个程序里的函数,比如最简单的,控制按钮的点击,最后实现的就是有两个程序,在新做的程序里点开始,然后这个采集的程序开始采集,点击结束就停止采集。谢谢各位大侠给点思路
[解决办法]
先学习UDP编程  
参见
http://www.cnblogs.com/xiaozhi_5638/p/3169641.html
[解决办法]
思路就是:利用多线程循环侦听某个端口以防止界面阻塞,当接收到消息之后根据消息的指令来做相应处理


public class SocketListener
{
    public event DltMessage EvtMessageReceived;// 接收到消息后事件
    private Thread work = null;
    private Socket socket = null;
    private int port = 11111;
        /// <summary>
        /// 开始监听
        /// </summary>
        public void StartListen()
        {
            work = new Thread(new ThreadStart(Start));
            work.IsBackground = true;
            work.Start();
        }
        public void Start()
        {
           try
            {
                IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, port);
                using (receiveClient = new UdpClient(remoteEP))
                {
                    while (true)
                    {


                        try
                        {
                            //接收
                            byte[] bytes = receiveClient.Receive(ref remoteEP);
                            MessageReceived(bytes);
                            Thread.Sleep(100);
                        }
                        catch(Exception e)
                        {
                            Console.WriteLine("接收udp消息错误,原因:" + e.Message);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// 接收完消息后触发
        /// </summary>
        private void MessageReceived(byte [] bytes)
        {
            if (EvtMessageReceived != null)
            {
                EvtMessageReceived(bytes);


            }
        }
}


接收到消息后通过委托拿到结果,再进行处理,这里你需要定义消息的格式,比如包头+包体:0001
[解决办法]
123456
0001为包头,123456为包体

public static void main()
{
    SocketListener sl = new SocketListener();
    sl.EvtMessageReceived += new DltMessage(MessageTransfer);
}
public void MessageTransfer(byte[] bytes)
{
    string msg = Encoding.Default.GetString(bytes);//这里需要注意编码格式,双方编码格式要一致
    string[] message = msg.Split('
[解决办法]
');
    if(message[0].Equals("0001"))
     {
        //点击开始按钮...只要拿到了消息就可以为所欲为了
     }
}

热点排行