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

📄 csock_file.cs

📁 自定义协议
💻 CS
📖 第 1 页 / 共 2 页
字号:
							stream.Write(bResult, 0, bResult.Length);
							logs("get voild connect");
						}
						break;
					case defcmd.ACTIION_TEST:		//测试网络连路
						break;				
					case defcmd.CWD:
						logs("请求改变当前文件传输目录");
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.CWD);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{

							String szFloder = Encoding.GetEncoding(936).GetString(Packet, 8, Packet.Length - 9);
							logs(szFloder);
							if (szFloder == "/")
							{
								logs("root");
								bResult = ResultPacket(defcmd.CWD, defcmd.OK);
								stream.Write(bResult, 0, bResult.Length);
								stream.Flush();
								m_sPath = "";

								break;
							}

							String szFloder_test = String.Format("{0}/{1}{2}",defcmd.CMS_HOME,m_sAccount_Home,szFloder);
							logs(szFloder_test);
							if (!Directory.Exists(szFloder_test))
							{
								bResult = ResultPacket(defcmd.CWD, defcmd.CWDNOTEXISTS);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							m_sPath = szFloder;
							bResult = ResultPacket(defcmd.CWD, defcmd.OK);
							stream.Write(bResult, 0, bResult.Length);
						}
						stream.Flush();

						break;

					case defcmd.UPF:
						logs("请求上传文件");
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.UPF);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{
							//创建目录信息不足
							if (Packet.Length <= 8)
							{
								bResult = ResultPacket(defcmd.UPF, defcmd.RNFERROR);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							String szFile = Encoding.GetEncoding(936).GetString(Packet, 8, Packet.Length - 9);
							szFile = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szFile);
							logs(szFile);
							if (File.Exists(szFile))
							{
								bResult = ResultPacket(defcmd.UPF, defcmd.MKDEXISTS);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							//fs_Size = seq;
							bResult = ResultPacket(defcmd.UPF, defcmd.OK);
							stream.Write(bResult, 0, bResult.Length);
							logs(szFile);
							fs =  new FileStream(szFile, FileMode.CreateNew);
							w = new BinaryWriter(fs);

						}
						stream.Flush();

						break;
					case defcmd.UPF_BODY:
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.UPF_BODY);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{
							//logs(String.Format("上传文件块编号[{0}]", seq));
							if (seq != 0)
								w.Write(Packet, 0, Packet.Length);
							else
							{
								logs("file end!");
								w.Close();
								fs.Close();
								m_Enable = false;
							}
							bResult = ResultPacket(defcmd.UPF_BODY, seq);
							stream.Write(bResult, 0, bResult.Length);
						}
						stream.Flush();

						break;

					case defcmd.DOF:
						logs("请求下载文件");
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.DOF);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{
							//创建目录信息不足
							if (Packet.Length <= 8)
							{
								bResult = ResultPacket(defcmd.DOF, defcmd.RNFERROR);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							String szFile = Encoding.GetEncoding(936).GetString(Packet, 8, Packet.Length - 9);
							szFile = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szFile);
							logs(szFile);
							if (!File.Exists(szFile))
							{
								bResult = ResultPacket(defcmd.DOF, defcmd.CWDNOTEXISTS);
								stream.Write(bResult, 0, bResult.Length);
								break;
							}
							//fs_Size = seq;
							bResult = ResultPacket(defcmd.DOF, defcmd.OK);
							stream.Write(bResult, 0, bResult.Length);
							logs(szFile);
							fs =  new FileStream(szFile, FileMode.Open, FileAccess.Read);
							r = new BinaryReader(fs);
							nfindex = 1;

						}
						stream.Flush();

						break;
					case defcmd.DOF_BODY:
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.DOF_BODY);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{
							//logs(String.Format("上传文件块编号[{0}]", seq));
							bResult = ResultPacket(defcmd.DOF_BODY, seq);
							stream.Write(bResult, 0, bResult.Length);
							nfindex ++;
						}
						stream.Flush();
						
						break;

					default:
						if (!m_Enable)
						{
							bResult = ResultPacket(defcmd.NOTCONNECT, cmd);
							stream.Write(bResult, 0, bResult.Length);
						}
						else
						{
							bResult = ResultPacket(cmd, defcmd.UNKNOWERROR);
							stream.Write(bResult, 0, bResult.Length);
						}

						stream.Flush();
						break;


				}
			}
			catch(Exception ep)
			{
				logs("[ParseCC_Cmd_file]error:" + ep.Message);
				return;
			}
		}

		private byte [] ResultPacket(int PacketType, int Result)
		{
			//MemoryStream ms = null;
			byte [] bTmp = null;
			try
			{
				switch(PacketType)
				{
					case defcmd.CONNECT:
						bTmp = new byte[17];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(17), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.CONNECT), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
						//result
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 12, 4);
						//Version
						bTmp[16] = defcmd.Version;
					
						return bTmp;
					case defcmd.ACTIION_TEST:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.ACTIION_TEST), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;

					case defcmd.CWD:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.CWD), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;

					case defcmd.UPF:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.UPF), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;

					case defcmd.UPF_BODY:
						bTmp = new byte[15];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(15), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.UPF_BODY), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes("OK\n"), 0, bTmp, 12, 3);

						return bTmp;
					case defcmd.DOF:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.DOF), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);

						return bTmp;

					case defcmd.DOF_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.DOF_BODY), 0, bTmp, 4, 4);
						//time
						if (i > 0)
						{
							//seq
							Buffer.BlockCopy(BitConverter.GetBytes(nfindex), 0, bTmp, 8, 4);
							//文件包
							Buffer.BlockCopy(rb, 0, bTmp, 12, i);
						}
						else
						{
							logs("end down file!");
							Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
							r.Close();
							fs.Close();
							m_Enable = false;
						}
						return bTmp;

					default:
						bTmp = new byte[20];
						//包长度
						Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
						//命令类型
						Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 4, 4);
						//seq
						Buffer.BlockCopy(BitConverter.GetBytes(defcmd.UNKNOWERROR), 0, bTmp, 8, 4);
						//time
						Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
						return bTmp;
				}
			}
			catch(Exception ep)
			{
				logs("[ResultPacket_file]error:" + ep.Message);
				return null;
			}		
		
		}

		private bool CheckUser(String Account, byte [] Sour, String Timestamp)
		{
			/*
			String szPack = "";
			for (int i = 0 ; i < Sour.Length; i ++)
				szPack = String.Format("{0}[{1}]", szPack, Sour[i]);

			logs(szPack);
			*/
			//打包AuthenticatorSource
			byte [] bTmp = Encoding.GetEncoding(936).GetBytes(String.Format("{0}000000000{1}000000000{2}", Account, "123", Timestamp));
			// This is one implementation of the abstract class MD5.
			MD5 md5 = new MD5CryptoServiceProvider();
			bTmp = md5.ComputeHash(bTmp);
			md5 = null;

			if (bTmp.Length != Sour.Length)
				return false;

			for (int i = 0 ; i < Sour.Length; i ++)
				if (bTmp[i] != Sour[i])
					return false;
			return true;
		}

		/// <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;
		}

	}
}

⌨️ 快捷键说明

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