📄 csock_file.cs
字号:
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 + -