基于UDP协议,接收数据
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
//using System.Threading.Tasks;
namespace UDPTest
{
/// <summary>
/// 接收
/// </summary>
public class LabelReceiveService
{
public SceneDataXmlRead sceneDataXmlRead;
/// <summary>
/// 用于UDP发送的网络服务类
/// </summary>
static UdpClient udpcRecv = null;
static IPEndPoint localIpep = null;
/// <summary>
/// 开关:在监听UDP报文阶段为true,否则为false
/// </summary>
public static bool IsUdpcRecvStart = false;
/// <summary>
/// 线程:不断监听UDP报文
/// </summary>
static Thread thrRecv;
/// <summary>
/// 接收到的数据
/// </summary>
public static int message = 0;
static int port = 8899; //端口号
public static void StartReceive()
{
if (!IsUdpcRecvStart) // 未监听的情况,开始监听
{
localIpep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port); // 本机IP和监听端口号
udpcRecv = new UdpClient(localIpep);
thrRecv = new Thread(ReceiveMessage);
thrRecv.Start();
IsUdpcRecvStart = true;
Console.WriteLine("UDP监听器已成功启动");
}
}
public static void StopReceive()
{
if (IsUdpcRecvStart)
{
thrRecv.Abort(); // 必须先关闭这个线程,否则会异常
udpcRecv.Close();
IsUdpcRecvStart = false;
Console.WriteLine("UDP监听器已成功关闭");
}
}
public static int oldIndex = 0;
/// <summary>
/// 接收数据
/// </summary>
/// <param name="obj"></param>
private static void ReceiveMessage(object obj)
{
while (true)
{
try
{
byte[] bytRecv = udpcRecv.Receive(ref localIpep);
if (bytRecv.Length == 0)
{
Thread.Sleep(10);
continue;
}
string strRec = Encoding.UTF8.GetString(bytRecv, 0, bytRecv.Length);
message = System.Convert.ToInt16(strRec);
//--------------------接收到的数据 message------------------------------------
//if (message == 0 && oldIndex == 1)
//{
// SceneDataXmlRead.Instance.ReadData();
//}
//oldIndex = message;
}
catch (Exception ex)
{
Thread.Sleep(10);
}
}
}
}
}