using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void SBTSI(StringBuilder sb)//十六进制转十进制
{
string hexString = sb.ToString();
int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);
Console.WriteLine(num);
}
static void TTS(StringBuilder sb)//时间戳转 XX秒XX毫秒
{
string hexString = sb.ToString();
long sec = Int64.Parse(hexString, System.Globalization.NumberStyles.HexNumber)/1000;
long usec=Int64.Parse(hexString, System.Globalization.NumberStyles.HexNumber)%1000;
Console.WriteLine("sec: {0} ",sec);
Console.WriteLine("usec: {0} ",usec);
}
static void recvhandle(byte[] data)
{
StringBuilder infoNum= new StringBuilder(12);
StringBuilder timestamp=new StringBuilder(24);
StringBuilder isMD5Value=new StringBuilder(12);
StringBuilder MessageType=new StringBuilder(6);
StringBuilder MessLength=new StringBuilder(6);
StringBuilder dangerMessagex=new StringBuilder(12);
StringBuilder dangerMessagey=new StringBuilder(12);
for (int i = 0; i <28; i++)
{
if(i<4)
//0-3
infoNum.Append(Convert.ToString(data[3-i],16).PadLeft(2,'0'));
if(4<=i&&i<12)
//4-11
timestamp.Append(Convert.ToString(data[15-i],16).PadLeft(2,'0'));
if(12<=i&&i<16)
//12-15
isMD5Value.Append(Convert.ToString(data[27-i],16).PadLeft(2,'0'));
if(16<=i&&i<18)
//16-17
MessageType.Append(Convert.ToString(data[33-i],16).PadLeft(2,'0'));
if(18<=i&&i<20)
//18-19
MessLength.Append(Convert.ToString(data[37-i],16).PadLeft(2,'0'));
if(20<=i&&i<24)
//20-23
dangerMessagex.Append(Convert.ToString(data[43-i],16).PadLeft(2,'0'));
if(24<=i&&i<28)
//24-27
dangerMessagey.Append(Convert.ToString(data[51-i],16).PadLeft(2,'0'));
}
Console.WriteLine(" ");
Console.WriteLine("---------------BEGIN---------------");
Console.WriteLine("----------------dmt----------------");
SBTSI(infoNum);
TTS(timestamp);
SBTSI(isMD5Value);
Console.WriteLine("----------------dm----------------");
Console.WriteLine("MessageType: 0X{0}",MessageType);
SBTSI(MessLength);
SBTSI(dangerMessagex);
SBTSI(dangerMessagey);
Console.WriteLine("----------------END----------------");
Console.WriteLine(" ");
}
static void Main(string[] args)
{
UdpClient client = null;
byte[] receiveData = null;
//实例化一个远程端点,IP和端口可以随意指定,等调用client.Receive(ref remotePoint)时会将该端点改成真正发送端端点
IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
client = new UdpClient(20001);
receiveData = client.Receive(ref remotePoint);//接收数据
recvhandle(receiveData);
client.Close();//关闭连接
}
}
}
}
这个是接收十六进制的数据,首先按结构体读取缓冲区数据,这里可能十六进制倒置了,所以我倒着接收了.
linux 编译C#
mcs recvtt.cs