📄 i8583.cs
字号:
msgArr.Add(BitMap);
for (int i = 0; i < 128; i++)
{
if (tab[i].flag == "1")
{
msgArr.Add(System.Text.Encoding.Default.GetBytes(tab[i].data));
}
}
byte[] B_Msg = new byte[length + 2];
int n = 0;
foreach (byte[] Msaarr in msgArr)
{
for (int i = 0; i < Msaarr.Length; i++)
{
B_Msg[n] = Msaarr[i];
n++;
}
}
return B_Msg; ////2位报文长度+11位报文头(原来是19位,修正后为tpdu+报文头)+4位消息类型+16位位图+数据元
}
/// <summary>
/// 接收报文BITMAP转换
/// </summary>
/// <param name="value">需要转换的数据</param>
/// <param name="fromBase">转换前进制</param>
/// <param name="toBase">转换后进制</param>
/// <returns></returns>
public string AcceptConvertString(string value, int fromBase, int toBase)
{
int intValue = Convert.ToInt32(value, fromBase);
string S_ConvertString = Convert.ToString(intValue, toBase);
S_ConvertString = Convert.ToInt32(S_ConvertString).ToString("D8");
return S_ConvertString;
}
/// <summary>
/// 解包
/// </summary>
/// <param name="B_Msg">字节报文:2位报文长度+11位报文头(原来是19位,修正后为tpdu+报文头)+4位消息类型+8/16位位图+数据元</param>
public void UnPack8583(byte[] B_Msg)
{
//报文不合法
if (B_Msg.Length < 33)
{
tab[0].data = "Error:Packed lenth<33";
return;
}
byte[] bitmap = new byte[16];
string S_BitMap = "";
int maplen = 16;
for (int i = 17; i < 33; i++) //取16位位图
{
bitmap[i - 17] = B_Msg[i];
}
if ((uint)bitmap[0] < 128)
{
maplen = 8;
for (int i = 8; i < 16; i++) bitmap[i] = 0;
}
for (int i = 0; i < maplen; i++)
{
string T_BitMap = AcceptConvertString(System.Convert.ToString(bitmap[i]), 10, 2);
S_BitMap = S_BitMap + T_BitMap;
}
//解读报文
int n = 0; int ptr = 33;
//if (maplen == 8) ptr = 25;
foreach (char C_BitMap in S_BitMap)
{
string flag = Convert.ToString(C_BitMap);
if (flag == "1")
{
try
{
tab[n].flag = "1";
if (tab[n].len_var > 0)
{
byte[] t_byte = new byte[tab[n].len_var];
for (int i = 0; i < tab[n].len_var; i++)
{
t_byte[i] = B_Msg[ptr];
ptr++;
}
int len = Int32.Parse(System.Text.Encoding.Default.GetString(t_byte));
byte[] t_byte2 = new byte[len];
for (int i = 0; i < len; i++)
{
t_byte2[i] = B_Msg[ptr];
ptr++;
}
if (n == 95) tab[n].data = System.Text.Encoding.Unicode.GetString(t_byte2);
else tab[n].data = System.Text.Encoding.Default.GetString(t_byte2);
}
else
{
byte[] t_byte = new byte[tab[n].len];
for (int i = 0; i < tab[n].len; i++)
{
t_byte[i] = B_Msg[ptr];
ptr++;
}
if (n == 95) tab[n].data = System.Text.Encoding.Unicode.GetString(t_byte);
else tab[n].data = System.Text.Encoding.Default.GetString(t_byte);
}
}
catch
{
tab[0].data = "Error:Packed tab" + n.ToString(); ;
return;
}
}
n++;
}
}
//报文收发
static public Socket sender = null;
static public Socket recver = null;
static public byte[] SynSocketClient(byte[] Msg)
{
byte[] bytes = new byte[10240];
try
{
if (!sender.Connected)
{
bytes[0] = 4;
}
if (sender.Poll(-1, SelectMode.SelectWrite))
{
int bytesSent = sender.Send(Msg, 0, Msg.Length, SocketFlags.None);
}
else
{
bytes[0] = 3;
}
if (sender.Poll(-1, SelectMode.SelectRead))
{
int bytesRec = sender.Receive(bytes, 0, 2, SocketFlags.None);
bytesRec = (int)bytes[0] * 256 + (int)bytes[1];
bytesRec = sender.Receive(bytes, 2, bytesRec, SocketFlags.None);
bytesRec += 0;
}
else
{
bytes[0] = 2;
}
}
catch
{
bytes[0] = 1;
}
return bytes;
}
static public bool Socket_stop()
{
try
{
sender.Shutdown(SocketShutdown.Both);
sender.Close();
recver.Shutdown(SocketShutdown.Both);
recver.Close();
}
catch
{
return false;
}
return true;
}
static public bool Socket_start()
{
try
{
string hostIP = "10.245.0.64";
int port = 19008;
// hostIP=Setup.GetReg("Pip");
// port=Int32.Parse(Setup.GetReg("Port"));
// IPHostEntry ipHostInfo=Dns.Resolve(hostIP);
// IPAddress ipAddress=ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(hostIP), port);
sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(remoteEP);
}
catch
{
return false;
}
return true;
}
static public bool Socket_recver()
{
try
{
string hostIP = "10.245.0.64";
int port = 6677;
// hostIP=Setup.GetReg("Pip");
// port=Int32.Parse(Setup.GetReg("Port"));
// IPHostEntry ipHostInfo=Dns.Resolve(hostIP);
// IPAddress ipAddress=ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(hostIP), port);
recver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
recver.Connect(remoteEP);
}
catch
{
return false;
}
return true;
}
public byte[] TestPack8583(string msgType)
{
byte[] cd =new byte[2];
ArrayList msgArr = new ArrayList();
byte[] tpdu = new byte[] { 0x60, 0x00, 0x30, 0x00, 0x00 };
byte[] pkg_head = new byte[] { 0x62, 0x00, 0x00, 0x00,0x00,0x00};
int length = msgType.Length+tpdu.Length+pkg_head.Length ;
byte[] B_Msg = new byte[length + 2];
cd[0] = (byte)((length / 256) % 256);
cd[1] = (byte)(length % 256);
msgArr.Add(cd);
msgArr.Add(tpdu);
msgArr.Add(pkg_head);
msgArr.Add(System.Text.Encoding.Default.GetBytes(msgType));
int n = 0;
foreach (byte[] Msaarr in msgArr)
{
for (int i = 0; i < Msaarr.Length; i++)
{
B_Msg[n] = Msaarr[i];
n++;
}
}
return B_Msg;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -