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

📄 cfile_trans.cs

📁 自定义协议
💻 CS
📖 第 1 页 / 共 2 页
字号:
						Buffer.BlockCopy(Packet, 0, bTmp, 20, Packet.Length);

						stream.Write(bTmp, 0, bTmp.Length);

						//等待回复信息
						stream.Flush();
						MainForm.logs("send data!CWD");
						return true;
					case defcmd.UPF:		//上传文件
						
						///组装包头
						bTmp = new byte[20+Packet.Length];
						Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.UPF), 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();
						MainForm.logs("send data!UPF");

						return true;
					case defcmd.UPF_BODY:
						byte [] rb = new byte[8192];
						int i = r.Read(rb, 0, rb.Length);

						bTmp = new byte[12+i];
						Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.UPF_BODY), 0, bTmp, 4, 4);
						if (i > 0)
						{
							//seq
							Buffer.BlockCopy(BitConverter.GetBytes(nfindex), 0, bTmp, 8, 4);
							//文件包
							Buffer.BlockCopy(rb, 0, bTmp, 12, i);
						}
						else
							Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);

						nfindex ++;
						stream.Write(bTmp, 0, bTmp.Length);

						//等待回复信息
						stream.Flush();
						MainForm.logs("send data!UPF_BODY");

						return true;
					case defcmd.DOF:	//下载文件
						///组装包头
						bTmp = new byte[20+Packet.Length];
						Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.DOF), 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();
						MainForm.logs("send data!DOF");

						return true;
					case defcmd.DOF_BODY:	//下载文件
						///组装包头
						bTmp = new byte[12];
						Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.DOF_BODY), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(nfindex), 0, bTmp, 8, 4);
						//下载文件请求
						stream.Write(bTmp, 0, bTmp.Length);
						nfindex ++;

						//等待回复信息
						stream.Flush();
						MainForm.logs("send data!DOF_BODY");

						return true;
				}
				return false;
			}
			catch(Exception ep)
			{
				MainForm.logs("[ParseCMSG_SendPacket]error:" + ep.Message);
				return false;
			}
		}

		/// <summary>
		/// 解释服务器返回指令
		/// </summary>
		/// <param name="cmd">命令</param>
		/// <param name="Reault">命令状态</param>
		/// <param name="Packet">包体</param>
		public bool ParseCMSG_FileCmd(int cmd, int Reault, byte[] Packet)
		{
			//int nIndex;
			//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]);

						MainForm.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;
							theApp.TraceMsg("连接成功!");
							return true;
						}
						else if (bVer != defcmd.Version)
							theApp.TraceMsg(String.Format("服务器版本:V{0}.{1}", Hver, Lver));
						else
							theApp.TraceMsg("连接失败!");

						break;

					case defcmd.CWD:	//改变当前目录
						if (defcmd.OK == Reault)
						{
							theApp.TraceMsg("目录跳转成功,当前目录为:"+m_shPath);
							return true;
						}
						else
							theApp.TraceMsg("目录跳转失败!");
						break;
					case defcmd.UPF:	//文件上传操作
						if (defcmd.OK == Reault)
						{
							theApp.TraceMsg("准备上传文件!");
							return true;
						}
						else
							theApp.TraceMsg("文件准备上传失败!");

						
						break;

					case defcmd.UPF_BODY:	//文件包体上传操作
						String szResult = Encoding.GetEncoding(936).GetString(Packet, 0, Packet.Length - 1);

						if (szResult.ToUpper() == "OK")
						{
							if (Reault != 0)
								theApp.TraceMsg(String.Format("上传文件块[{0}]成功!", Reault));
							else
							{
								m_Enable = false;
								r.Close();
								fs.Close();
								theApp.TraceMsg("上传文件成功!");
							}
							return true;
						}
						else
							theApp.TraceMsg("文件准备上传失败!");
						break;

					case defcmd.DOF:	//文件下载操作
						if (defcmd.OK == Reault)
						{
							theApp.TraceMsg("准备下载文件!");
							return true;
						}
						else
							theApp.TraceMsg("文件准备下载失败!");

						break;
					case defcmd.DOF_BODY:
						if (Reault != 0)
						{
							theApp.TraceMsg(String.Format("下载文件块[{0}]成功!", Reault));
							w.Write(Packet, 0, Packet.Length);
						}
						else
						{
							m_Enable = false;
							w.Close();
							fs.Close();
							theApp.TraceMsg("下载文件成功!");
						}
						break;
				}
			}
			catch(Exception ep)
			{
				MainForm.logs("[ParseCMSG_FileCmd]error:" + ep.Message);
				return false;
			}
			return false;
		}



		/// <summary>
		/// 获取服务器返回(验证过程)
		/// </summary>
		/// <param name="stream">SOCKET流</param>
		/// <returns></returns>
		public bool ThreadRecvCMSG_FilePacket(NetworkStream stream)
		{
			
			Int32 i;
			byte []tmp = null;

			//init param
			int nTotal;
			int nCmd;
			int nSeq;
			MemoryStream ms = null;
			
			if (null == stream)
				return false;

			try
			{
				tmp = new byte[1024];

				if ((i = stream.Read(tmp, 0, tmp.Length)) > 4)
				{
					ms = new MemoryStream(2048);
					ms.Write(tmp, 0, i);
				}
				stream.Flush();

				if (ms.Length > 12)
				{
					tmp = new byte[12];
					ms.Position = 0;
					if ((i = ms.Read(tmp, 0, 12)) == 12)
					{
						nTotal = BitConverter.ToInt32(defcmd.b2b(tmp, 0, 4), 0);
						nCmd = BitConverter.ToInt32(defcmd.b2b(tmp, 4, 4), 0);
						nSeq = BitConverter.ToInt32(defcmd.b2b(tmp, 8, 4), 0);
						if (ms.Length >= (nTotal - 12))
							tmp = new byte[nTotal - 12];
						if ((i = ms.Read(tmp, 0, nTotal - 12))> 0)
						{
							ms.Close();
							ms = null;
							return ParseCMSG_FileCmd(nCmd, nSeq, tmp);

						
						}
					}
				}
			}
			catch(ArgumentOutOfRangeException aore)
			{
				MainForm.logs(String.Format("(ThreadRecvCMSG_FilePacket)Source:{0},TargetSite{1},Message{2}", aore.Source, aore.TargetSite, aore.Message));
				aore = null;

			}
			catch(IOException ioe)
			{
				MainForm.logs(String.Format("(ThreadRecvCMSG_FilePacket)Source:{0},TargetSite{1},Message{2}", ioe.Source, ioe.TargetSite, ioe.Message));
				ioe = null;
			}			
			catch(Exception ep)
			{
				MainForm.logs(String.Format("(ThreadRecvCMSG_FilePacket)Source:{0},TargetSite{1},Message{2}", ep.Source, ep.TargetSite, ep.Message));
				ep = null;
			
			}
			return false;
		}


	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -