服务器端
class Program
{
static void Main(string[] args)
{
UdpClient udpServer = new UdpClient(9999);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
udpServer.Client.Blocking = false; //非阻塞
Message.Init();//初始化结构体
while (true)
{
int buffSizeCurrent;
buffSizeCurrent = udpServer.Client.Available;
byte[] RecvBytes;
if (buffSizeCurrent > 0)
{
RecvBytes = udpServer.Receive(ref ipEndPoint);
Message.m_GNSSMessage = (GNSSMessage)BytesToStruct(RecvBytes, Message.m_GNSSMessage.GetType());//结构体赋值
Random randObj = new Random();
Console.ForegroundColor = (ConsoleColor)randObj.Next(1, 16);
}
}
}
public static object BytesToStruct(byte[] bytes, Type type)//使用内存拷贝时注意定长结构体的数组及字符串
{
int size = Marshal.SizeOf(type);
if (size > bytes.Length)
return null;
IntPtr structPtr = Marshal.AllocHGlobal(size);
Marshal.Copy(bytes, 0, structPtr, size);
object obj = Marshal.PtrToStructure(structPtr, type);
Marshal.FreeHGlobal(structPtr);
return obj;
}
}
客户端
class Broadcast
{
private static UdpClient client;
private static IPEndPoint ipendpoint;
private static Thread BroadcastThread;
private static int timeS;
public static bool IsRunning = false;
public static void Init(string ip,int port)
{
client = new UdpClient(0);
ipendpoint = new IPEndPoint(IPAddress.Parse(ip),port);
}
public static void Start(string ip, int port,int time=1000)
{
Init(ip, port);
timeS = time;
BroadcastThread = new Thread(Broadcast);
BroadcastThread.Start();
IsRunning = true;
}
public static void Stop()
{
IsRunning = false;
BroadcastThread.Abort();
client = null;
BroadcastThread = null;
ipendpoint = null;
timeS = 1000;
GC.Collect();
}
public static void Broadcast()
{
while(true)
{
byte[] SendBytes = StructToBytes(Message.m_GNSSMessage);
client.Send(SendBytes, SendBytes.Length, ipendpoint);
Thread.Sleep(timeSpan);
}
}
public static byte[] StructToBytes(object obj)//注意定长
{
int size = Marshal.SizeOf(obj);
byte[] bytes = new byte[size];
IntPtr structPtr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(obj, structPtr, false);
Marshal.Copy(structPtr, bytes, 0, size);
Marshal.FreeHGlobal(structPtr);
return bytes;
}
}
有钱的捧个钱场,没钱的捧个人场
这里是胖子东,一个正在路上的低级码农