⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cs

📁 自定义协议
💻 CS
📖 第 1 页 / 共 4 页
字号:
						///组装包头
						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 + -