📄 mainform.cs
字号:
///组装包头
bTmp = new byte[20];
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.ACTIION_TEST), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//时间
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//网络连路测试请求
stream.Write(bTmp, 0, bTmp.Length);
//等待回复信息
stream.Flush();
logs("send data!ACTIION_TEST");
break;
case defcmd.FLALL: //显示文件目录信息
///组装包头
bTmp = new byte[20+Packet.Length];
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.FLALL), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//时间
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//文件夹名称
Buffer.BlockCopy(Packet, 0, bTmp, 20, Packet.Length);
//创建文件夹请求
stream.Write(bTmp, 0, bTmp.Length);
//等待回复信息
stream.Flush();
logs("send data!FLALL");
break;
case defcmd.MKD: //创建文件侠操作
///组装包头
bTmp = new byte[20+Packet.Length];
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.MKD), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//时间
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//文件夹名称
Buffer.BlockCopy(Packet, 0, bTmp, 20, Packet.Length);
//创建文件夹请求
stream.Write(bTmp, 0, bTmp.Length);
//等待回复信息
stream.Flush();
logs("send data!MKD");
break;
case defcmd.RMD: //移除文件侠操作
///组装包头
bTmp = new byte[20+Packet.Length];
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.RMD), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//时间
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//文件夹名称
Buffer.BlockCopy(Packet, 0, bTmp, 20, Packet.Length);
//创建文件夹请求
stream.Write(bTmp, 0, bTmp.Length);
//等待回复信息
stream.Flush();
logs("send data!MKD");
break;
case defcmd.RND:
///组装包头
bTmp = new byte[20+Packet.Length];
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.RND), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//时间
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//文件夹名称
Buffer.BlockCopy(Packet, 0, bTmp, 20, Packet.Length);
//修改文件夹名称请求
stream.Write(bTmp, 0, bTmp.Length);
//等待回复信息
stream.Flush();
logs("send data!RND");
break;
case defcmd.RNF:
///组装包头
bTmp = new byte[20+Packet.Length];
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.RNF), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//时间
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//文件名称
Buffer.BlockCopy(Packet, 0, bTmp, 20, Packet.Length);
//修改文件名称请求
stream.Write(bTmp, 0, bTmp.Length);
//等待回复信息
stream.Flush();
logs("send data!RNF");
break;
case defcmd.CWD:
bTmp = new byte[20+Packet.Length];
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.CWD), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//时间
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//申请改变当前路径
Buffer.BlockCopy(Packet, 0, bTmp, 20, Packet.Length);
stream.Write(bTmp, 0, bTmp.Length);
//等待回复信息
stream.Flush();
logs("send data!CWD");
break;
case defcmd.PWD:
bTmp = new byte[20+Packet.Length];
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.PWD), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//时间
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//申请改变当前路径
Buffer.BlockCopy(Packet, 0, bTmp, 20, Packet.Length);
stream.Write(bTmp, 0, bTmp.Length);
//等待回复信息
stream.Flush();
logs("send data!PWD");
break;
case defcmd.DELE: //删除文件操作
///组装包头
bTmp = new byte[20+Packet.Length];
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.DELE), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//时间
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//文件名称
Buffer.BlockCopy(Packet, 0, bTmp, 20, Packet.Length);
//删除文件请求
stream.Write(bTmp, 0, bTmp.Length);
//等待回复信息
stream.Flush();
logs("send data!DELE");
break;
}
return true;
}
catch(Exception ep)
{
logs("[ParseCMSG_Packet]error:" + ep.Message);
return false;
}
}
/// <summary>
/// 解释服务器返回指令
/// </summary>
/// <param name="cmd">命令</param>
/// <param name="Reault">命令状态</param>
/// <param name="Packet">包体</param>
public void ParseCMSG_Cmd(int cmd, int Reault, byte[] Packet)
{
int nIndex;
//int nLen;
//byte [] bResult = null;
String szSur = null;
try
{
switch(cmd)
{
case defcmd.CONNECT: //CC登录请求
String szPack = "";
for (int i = 0 ; i < Packet.Length; i ++)
szPack = String.Format("{0}[{1}]", szPack, Packet[i]);
logs(szPack);
byte bVer = Packet[4];
byte Hver = (byte)(bVer >> 4);
byte Lver = (byte)(bVer & 0x0f);
if ( defcmd.OK == BitConverter.ToInt32(defcmd.b2b(Packet, 0, 4), 0))
{
m_Enable = true;
TraceMsg("连接成功!");
ParseCMSG_SendPacket(defcmd.FLALL, Encoding.GetEncoding(936).GetBytes("LIST\n"));
//启动连路测试时钟
Acitve_Timer.Enabled = true;
}
else if (bVer != defcmd.Version)
MessageBox.Show(String.Format("服务器版本:V{0}.{1}", Hver, Lver));
else
TraceMsg("连接失败!");
break;
case defcmd.ACTIION_TEST:
if (defcmd.OK == Reault)
TraceMsg("网络连路畅通!");
else
TraceMsg("网络连路受影响,可能需要重新连接!");
break;
case defcmd.FLALL: //显示文件目录信息
if (defcmd.FDLISTERROR == Reault)
{
TraceMsg("文件列表错误");
logs("文件列表错误");
break;
}
TraceMsg("接收文件列表");
if ( Packet.Length <= 8 )
{
TraceMsg("文件列表为空!");
return;
}
szSur = Encoding.GetEncoding(936).GetString(defcmd.b2b(Packet, 8, Packet.Length - 8));
String []szName = szSur.Split(new char[]{'\n'});
Fnode node = null;
FileQueue.Clear();
if (m_sPath != "/")
{
node = new Fnode(0, "上一级");
FileQueue.Enqueue(node);
}
for ( nIndex = 0; nIndex < szName.Length; nIndex++)
{
if (szName[nIndex] == "")
continue;
else if (szName[nIndex].Substring(0, 1) == "D")
node = new Fnode(1, szName[nIndex].Substring(1));
else if (szName[nIndex].Substring(0, 1) == "F")
node = new Fnode(2, szName[nIndex].Substring(1));
else
continue;
FileQueue.Enqueue(node);
}
SendMessage((int)this.Handle, WM_UPDATELIST, 0, 0);
break;
case defcmd.CWD:
if (defcmd.OK == Reault)
{
m_sPath = m_sPath_tmp;
ParseCMSG_SendPacket(defcmd.FLALL, Encoding.GetEncoding(936).GetBytes("LIST\n"));
TraceMsg("目录跳转成功,当前目录为:"+m_sPath);
}
else
TraceMsg("目录跳转失败!");
break;
case defcmd.MKD: //创建文件侠操作
if (defcmd.OK == Reault)
{
TraceMsg("文件夹创建成功!");
ParseCMSG_SendPacket(defcmd.FLALL, Encoding.GetEncoding(936).GetBytes("LIST\n"));
}
else
TraceMsg("文件夹创建失败!");
break;
case defcmd.RMD: //移除文件侠操作
if (defcmd.OK == Reault)
{
TraceMsg("文件夹移除成功!");
ParseCMSG_SendPacket(defcmd.FLALL, Encoding.GetEncoding(936).GetBytes("LIST\n"));
}
else
TraceMsg("文件夹移除失败!");
break;
case defcmd.RND:
if (defcmd.OK == Reault)
{
TraceMsg("文件夹改名成功!");
ParseCMSG_SendPacket(defcmd.FLALL, Encoding.GetEncoding(936).GetBytes("LIST\n"));
}
else
TraceMsg("文件夹改名失败!");
break;
case defcmd.RNF:
if (defcmd.OK == Reault)
{
TraceMsg("文件改名成功!");
ParseCMSG_SendPacket(defcmd.FLALL, Encoding.GetEncoding(936).GetBytes("LIST\n"));
}
else
TraceMsg("文件改名失败!");
break;
case defcmd.PWD:
if (defcmd.OK == Reault)
{
szSur = Encoding.GetEncoding(936).GetString(defcmd.b2b(Packet, 8, Packet.Length - 8));
TraceMsg("当前服务器目录:"+szSur);
}
else
TraceMsg("获取服务器目录失败!");
break;
case defcmd.DELE: //删除文件操作
if (defcmd.OK == Reault)
{
TraceMsg("文件删除成功!");
ParseCMSG_SendPacket(defcmd.FLALL, Encoding.GetEncoding(936).GetBytes("LIST\n"));
}
else
TraceMsg("文件删除失败!");
break;
}
}
catch(Exception ep)
{
logs("[ParseCMSG_Cmd]error:" + ep.Message);
return;
}
}
/// <summary>
/// 查找数组位置
/// </summary>
/// <param name="Value">源数组</param>
/// <returns>字符'\n'位置</returns>
private int SearchChar(byte [] Value)
{
for(int i=0; i< Value.Length; i++)
{
if (Value[i] == 10)
return i;
}
return -1;
}
/// <summary>
/// 从指定数组位置中开始查找字符位置
/// </summary>
/// <param name="Value">源数组</param>
/// <param name="index">源数组开始位置</param>
/// <returns>字符'\n'位置</returns>
private int SearchChar(byte [] Value, int index)
{
for(int i=index; i< Value.Length; i++)
{
if (Value[i] == 10)
return i;
}
return -1;
}
private void FileTreeFull()
{
if (null == FileQueue)
return;
/*
if ( FileQueue.Count <= 0 )
{
TraceMsg("列表更新错误!");
logs("列表更新错误!");
return;
}
//*/
FiletreeView.Nodes.Clear();
Fnode node=null;
while(FileQueue.Count > 0)
{
node = (Fnode)FileQueue.Dequeue();
TreeNode tn= new TreeNode(node.m_sName, node.m_nImage, node.m_nImage);
FiletreeView.Nodes.Add(tn);
}
}
/// <summary>
/// 错误日志
/// </summary>
/// <param name="szMsg">记录信息</param>
public static void logs(string szMsg)
{
DateTime dt=DateTime.Now;
String szFile=string.Format("{0}/log/cc_log{1}.log", Directory.GetCurrentDirectory(), DateTime.Now.ToLongDateString());
lock(typeof(MainForm))
{
using (StreamWriter sw = new StreamWriter(szFile, true))
{
sw.WriteLine(string.Format("[{0}]:{1}",DateTime.Now, szMsg));
}
}
}
/// <summary>
/// 打印错误信息
/// </summary>
/// <param name="szMsg">错误信息</param>
public void TraceMsg(String szMsg)
{
DateTime ShowTime = DateTime.Now;
string sMsg = "[" + ShowTime.ToString() + "]:" + szMsg;
lock(typeof(MainForm))
{
MsgBox.Items.Add(sMsg);
MsgBox.SetSelected(MsgBox.Items.Count -1, true);
if ( MsgBox.Items.Count > 1000)
MsgBox.Items.Clear();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -