110,534
社区成员
发帖
与我相关
我的任务
分享
//打包
public byte[] SetupPack(char Type)
{
CCheck check=new CCheck();
byte[] RStr,PHead=new byte[100],PBody,PTrail;
byte[] rSendPack=new byte[200];
byte[] Temp=new byte[200],sendtemp;
byte tempaddsum=0,tempxorsum=0;
// rSendPack.SetValue(0);
if (Type == 'A')
{
//包头
//int rand = GetSequenNumber();//包序列号
if (SetFlag == 1)//静态包
{
//包体
rSendPack[0] = 0xff;//包头
rSendPack[1] = 0x30;
rSendPack[2] = 43;//长度
rSendPack[3] = 0x02;//命令字
rSendPack[4] = 0x01;//设置标志1为静态,2为动态
//clientip
rSendPack[5] = Convert.ToByte(myset.ClientIP1.Text);
rSendPack[6] = Convert.ToByte(myset.ClientIP2.Text);
rSendPack[7] = Convert.ToByte(myset.ClientIP3.Text);
rSendPack[8] = Convert.ToByte(myset.ClientIP4.Text);
//子网掩码
rSendPack[9] = Convert.ToByte(myset.SubNetText1.Text);
rSendPack[10] = Convert.ToByte(myset.SubNetText2.Text);
rSendPack[11] = Convert.ToByte(myset.SubNetText3.Text);
rSendPack[12] = Convert.ToByte(myset.SubNetText4.Text);
//网关
rSendPack[13] = Convert.ToByte(myset.GatwayText1.Text);
rSendPack[14] = Convert.ToByte(myset.GatwayText2.Text);
rSendPack[15] = Convert.ToByte(myset.GatwayText3.Text);
rSendPack[16] = Convert.ToByte(myset.GatwayText4.Text);
//Mac地址
//char[] ch=myset.MACAdderText1.Text.ToCharArray();
//byte[] by=Encoding.ASCII.GetBytes(ch);
rSendPack[17] = Convert.ToByte(myset.MACAdderText1.Text.Trim(),16);
rSendPack[18] = Convert.ToByte(myset.MACAdderText2.Text.Trim(), 16);
rSendPack[19] = Convert.ToByte(myset.MACAdderText3.Text.Trim(), 16);
rSendPack[20] = Convert.ToByte(myset.MACAdderText4.Text.Trim(), 16);
rSendPack[21] = Convert.ToByte(myset.MACAdderText5.Text.Trim(), 16);
rSendPack[22] = Convert.ToByte(myset.MACAdderText6.Text.Trim(), 16);
//新网桥ID号
long lid = Convert.ToInt64(myset.IDtextBox.Text);
rSendPack[23] = Convert.ToByte(lid/256);
rSendPack[24] = Convert.ToByte(lid%256);
//服务器IP地址
rSendPack[25] = Convert.ToByte(myset.ServerIPtext1.Text);
rSendPack[26] = Convert.ToByte(myset.ServerIPtext2.Text);
rSendPack[27] = Convert.ToByte(myset.ServerIPtext3.Text);
rSendPack[28] = Convert.ToByte(myset.ServerIPtext4.Text);
//服务器端口号
lid = Convert.ToInt64(myset.PortText.Text);
rSendPack[29]=Convert.ToByte(lid/256);
rSendPack[30] = Convert.ToByte(lid%256);
//旧网桥ID号
lid = Convert.ToInt32(listView1.SelectedItems[0].SubItems[2].Text);
rSendPack[31] = Convert.ToByte(lid / 256);
rSendPack[32] = Convert.ToByte(lid % 256);
//终端名称10bytes
char[] chTemp = myset.TermNametextBox.Text.ToCharArray();
// byte[] bTemp
byte[] bTemp = Encoding.Default.GetBytes(chTemp, 0, chTemp.Length);
Buffer.BlockCopy(bTemp, 0, rSendPack, 33, bTemp.Length);
//包尾
rSendPack.CopyTo(Temp,0);
check.AddSum(Temp, 43, ref tempaddsum);
check.XorSum(Temp, 43, ref tempxorsum);
rSendPack[43] = tempaddsum;
rSendPack[44] = tempxorsum;
}//if (SetFlag == 1)
//动态设置打包begin
else if(SetFlag ==0)
{
rSendPack.Initialize();
rSendPack[0] = 0xff;//包头
rSendPack[1] = 0x30;
rSendPack[2] = 43;//长度
rSendPack[3] = 0x02;//命令字
rSendPack[4] = 0x02;//设置标志1为静态,2为动态
//Mac地址
//char[] ch=myset.MACAdderText1.Text.ToCharArray();
//byte[] by=Encoding.ASCII.GetBytes(ch);
rSendPack[17] = Convert.ToByte(myset.MACAdderText1.Text.Trim(), 16);
rSendPack[18] = Convert.ToByte(myset.MACAdderText2.Text.Trim(), 16);
rSendPack[19] = Convert.ToByte(myset.MACAdderText3.Text.Trim(), 16);
rSendPack[20] = Convert.ToByte(myset.MACAdderText4.Text.Trim(), 16);
rSendPack[21] = Convert.ToByte(myset.MACAdderText5.Text.Trim(), 16);
rSendPack[22] = Convert.ToByte(myset.MACAdderText6.Text.Trim(), 16);
//新id号
long tempid = Convert.ToInt64(myset.IDtextBox.Text);
rSendPack[23] = Convert.ToByte(tempid / 256);
rSendPack[24] = Convert.ToByte(tempid%256);
//服务器IP地址
rSendPack[25] = Convert.ToByte(myset.ServerIPtext1.Text);
rSendPack[26] = Convert.ToByte(myset.ServerIPtext2.Text);
rSendPack[27] = Convert.ToByte(myset.ServerIPtext3.Text);
rSendPack[28] = Convert.ToByte(myset.ServerIPtext4.Text);
//服务器端口号
long port = Convert.ToInt64(myset.PortText.Text);
rSendPack[29] = Convert.ToByte(port / 256);
rSendPack[30] = Convert.ToByte(port % 256);
//旧网桥ID号
int lid = Convert.ToInt32(listView1.SelectedItems[0].SubItems[2].Text);
rSendPack[31] = Convert.ToByte(lid / 256);
rSendPack[32] = Convert.ToByte(lid % 256);
//终端名称10bytes
char[] chTemp = myset.TermNametextBox.Text.ToCharArray();
// byte[] bTemp
byte[] bTemp = Encoding.Default.GetBytes(chTemp, 0, chTemp.Length);
Buffer.BlockCopy(bTemp, 0, rSendPack, 33, bTemp.Length);
rSendPack.CopyTo(Temp, 0);
check.AddSum(Temp, 43, ref tempaddsum);
check.XorSum(Temp, 43, ref tempxorsum);
rSendPack[43] = tempaddsum;
rSendPack[44] = tempxorsum;
}//动态设置打包end
}//if (Type == 'A')
if (Type == 'S')//打搜索包
{
//char[] cSetuppack = new char[] {'\0xff','\0x30','\x4','\0x01' };
//char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };
rSendPack[0] = 0xff;//包头
rSendPack[1] = 0x30;
rSendPack[2] = 4;//长度
rSendPack[3] = 0x01;//命令字
Temp = rSendPack;
check.AddSum(Temp, 4, ref tempaddsum);
check.XorSum(Temp, 4, ref tempxorsum);
rSendPack[4] = tempaddsum;
rSendPack[5] = tempxorsum;
}//if (Type == 'S')
return rSendPack;
}
//写成VC的,rSendPack在调试时是乱码,不知道在VC里怎么用C#的byte[]类型数据
//打包
BYTE CNetBrgSetParamDlg::SetupPack(char Type)
{
BYTE RStr,PBody,PTrail;
BYTE PHead[100] = {0};
BYTE rSendPack[200]={0};
BYTE temp[200]={0};
BYTE sendTemp;
BYTE tempaddsum=0;
BYTE tempxorsum=0;
CCheck check;
//设置参数包
if(Type=='A')
{
if(nSetFlag==1)
{
//包体
rSendPack[0]=0xFF;
rSendPack[1]=0x30;
rSendPack[2]=43;
rSendPack[3]=0x02;
rSendPack[4]=0x01;
//ClientIP
int nClientIP1Len=strlen(strClientIP1);
memcpy(rSendPack,strClientIP1,nClientIP1Len);
}
if(nSetFlag==0)
{
}
}
//搜索包
if(Type=='S')
{
rSendPack[0]=0xFF;
rSendPack[1]=0x30;
rSendPack[2]=4;
rSendPack[3]=0x01;
// strcpy(temp,rSendPack);
check.AddSum(temp,4,tempaddsum);
check.XorSum(temp,4,tempxorsum);
rSendPack[4]=tempaddsum;
rSendPack[5]=tempxorsum;
}
return rSendPack[200];
}
//解包函数
private int unpack(byte[] S_RecPack)
{
CCheck uncheck = new CCheck();
DB_class mydb = new DB_class();
OleDbConnection ole_con=new OleDbConnection ();
string[] split = null;
string substr = "\n", Command;
char[] del = substr.ToCharArray();//将字符串分解为数组
byte[] tempbuff = new byte[100], unbuff = null, rTempBuff = new byte[100];
byte addsum=0,xorsum=0;
int rsult=0;
//检查包类型0xff30是下行包,0xff40是上行包
if ((S_RecPack[0].ToString() != "255")&&(S_RecPack[1].ToString() != "40"))
{
return rsult = -1;
}
//检查校验
int len=Convert.ToInt32(S_RecPack[2]);
Buffer.BlockCopy(S_RecPack, 0, rTempBuff, 0, S_RecPack.Length-2);
addsum= S_RecPack[len];
xorsum=S_RecPack[len+1];
if ((uncheck.AddSum(rTempBuff, len, ref addsum) != true) && (uncheck.XorSum(rTempBuff, len, ref xorsum) != true))
{
MessageBox.Show("数据校验错误!","参数设置");
rsult= - 2;
return rsult;
}
Command = Convert.ToString( S_RecPack[3]);
switch(Command)
{
case "2"://收到设置包
int flag = Convert.ToInt32(S_RecPack[6]);
if (flag == 0)//服务机设置成功
{
//发送搜索包SendPack();
MessageBox.Show("服务机设置成功!", "参数设置");
if (myset.SetIDFlag == true)
{
//新设置id号
// MessageBox.Show("服务机设置成功!","参数设置");
int r_newid = Convert.ToUInt16(S_RecPack[4] * 256 + S_RecPack[5]);
//添加数据库
try
{
mydb.ConnectDB(ref ole_con);
if (mydb.InsertID(ole_con, r_newid))
{
}
p_type = 'S';
this.listView1.Items.Clear();
tempbuff = SetupPack(p_type);
SendPack(tempbuff);
}
catch
{
p_type = 'S';
this.listView1.Items.Clear();
tempbuff = SetupPack(p_type);
SendPack(tempbuff);
MessageBox.Show("网络信息设置异常!", "参数设置");
}
}
else
{
p_type = 'S';
this.listView1.Items.Clear();
tempbuff = SetupPack(p_type);
SendPack(tempbuff);
}
}
else
{
rsult= - 3;
MessageBox.Show("服务机设置失败,请重试!", "参数设置");
return rsult;
}
break;
case "1"://收到搜索包
//刷新显示
string strtem = Encoding.ASCII.GetString(S_RecPack);
//strtem = Convert.ToString(S_RecPack, 10);
sSetIp[0] = Convert.ToString(S_RecPack[4]);//设置标志
sSetIp[1] = Convert.ToString(S_RecPack[5]);//cilentip
sSetIp[2] = Convert.ToString(S_RecPack[6]);
sSetIp[3] = Convert.ToString(S_RecPack[7]);
sSetIp[4] = Convert.ToString(S_RecPack[8]);
sSetIp[5] = Convert.ToString(S_RecPack[9]);//子网掩码
sSetIp[6] = Convert.ToString(S_RecPack[10]);
sSetIp[7] = Convert.ToString(S_RecPack[11]);
sSetIp[8] = Convert.ToString(S_RecPack[12]);
sSetIp[9] = Convert.ToString(S_RecPack[13]);//网关
sSetIp[10] = Convert.ToString(S_RecPack[14]);
sSetIp[11] = Convert.ToString(S_RecPack[15]);
sSetIp[12] = Convert.ToString(S_RecPack[16]);
//Mac地址
StringBuilder sb = new StringBuilder();
Array.Reverse(S_RecPack,17,1);
foreach (byte b in S_RecPack)
sb.AppendFormat("{0:x2}", b);
sSetIp[13] = sb.ToString(34, 2);
sSetIp[14] = sb.ToString(36, 2);
sSetIp[15] = sb.ToString(38, 2);
sSetIp[16] = sb.ToString(40, 2);
sSetIp[17] = sb.ToString(42, 2);
sSetIp[18] = sb.ToString(44, 2);
////网桥ID号
sSetIp[19] = Convert.ToString(S_RecPack[23] * 256 + S_RecPack[24]);
sSetIp[21]= Convert.ToString(S_RecPack[25]);//服务器IP地址
sSetIp[22] = Convert.ToString(S_RecPack[26]);
sSetIp[23] = Convert.ToString(S_RecPack[27]);
sSetIp[24]= Convert.ToString(S_RecPack[28]);
sSetIp[25] = Convert.ToString(S_RecPack[29] * 256 + S_RecPack[30]);//服务器端口号
//终端名称
byte[] bTemp=new byte[50] ;
Buffer.BlockCopy(S_RecPack, 31, bTemp, 0, 10);
sSetIp[26] = Encoding.Default.GetString(bTemp, 0, 10);
return rsult = 1;
break;
default:
return rsult=-4;
break;
}//switch(Command)
return rsult;
}