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"))
{
//点击开始按钮...只要拿到了消息就可以为所欲为了
}
}