public void Upload(Socket connection, byte[] handshakeMsg, int handshakeMsgLength) { if (closed) { return; } lastActivity = DateTime.Now; var state = new FileTransmitState { Connection = connection, }; try { byte[] response = { 1, 0x10, 0 };//Succeed msg var fileInfoStr = Encoding.UTF8.GetString(handshakeMsg, 6, handshakeMsgLength - 6); if (string.IsNullOrEmpty(fileInfoStr)) { Logging.Error("FileInfo Error,response X'40'"); response[1] = 0x40; //Client Msg Error } else { var fileInfoArray = fileInfoStr.Split('|'); if (fileInfoArray.Length != 2) { Logging.Error("FileInfo Error,response X'40'"); response[1] = 0x40; //Client Msg Error } else { state.DealingByteCount = 0; state.Buffer = null; state.FileName = fileInfoArray[0]; state.FileSize = Convert.ToInt32(fileInfoArray[1]); if (!Util.CheckDiskSpace(FileServerDir, state.FileSize)) { response[1] = 0x51; //Not enough diskspace Msg Error } } } if (response[1] != 0x10) { state.Connection.BeginSend(response, 0, response.Length, 0, UploadFinishingCallBack, state); return; } state.Connection.BeginSend(response, 0, response.Length, 0, UploadHandshakeSendCallback, state); } catch (Exception e) { Logging.Debug("握手过程中发生异常"); Logging.LogUsefulException(e); state.Close(); } }
public void Upload(Socket connection, byte[] handshakeMsg, int handshakeMsgLength) { if (closed) { return; } lastActivity = DateTime.Now; var state = new FileTransmitState { Connection = connection, }; try { byte[] response = { 1, 0x10, 0 };//Succeed msg var fileInfoStr = Encoding.UTF8.GetString(handshakeMsg, 6, handshakeMsgLength - 6); if (string.IsNullOrEmpty(fileInfoStr)) { Logging.Error("FileInfo Error,response X'40'"); response[1] = 0x40; //Client Msg Error } else { var fileInfoArray = fileInfoStr.Split('|'); if (fileInfoArray.Length != 2) { Logging.Error("FileInfo Error,response X'40'"); response[1] = 0x40; //Client Msg Error } else { state.DealingByteCount = 0; state.Buffer = null; state.FileName = fileInfoArray[0]; state.FileSize = Convert.ToInt32(fileInfoArray[1]); if (!Util.CheckDiskSpace(FileServerDir, state.FileSize)) { response[1] = 0x51; //Not enough diskspace Msg Error } } } if (response[1] != 0x10) { state.Connection.BeginSend(response, 0, response.Length, 0, UploadFinishingCallBack, state); return; } state.Connection.BeginSend(response, 0, response.Length, 0, UploadHandshakeSendCallback, state); } catch (Exception e) { Logging.Debug("握手过程中发生异常"); Logging.LogUsefulException(e); state.Close(); } }
private void Close(FileTransmitState transmitState) { lock (this) { if (closed) { return; } closed = true; } transmitState?.Close(); }
/// <summary> /// 文件下载服务处理 /// </summary> /// <param name="connection"></param> /// <param name="handshakeMsg"></param> /// <param name="handshakeMsgLength"></param> public void Download(Socket connection, byte[] handshakeMsg, int handshakeMsgLength) { if (closed) { return; } lastActivity = DateTime.Now; var state = new FileTransmitState { Connection = connection, }; try { List<byte> response = new List<byte> { 1, 0x10, 0 };//Succeed msg var fileInfoStr = Encoding.UTF8.GetString(handshakeMsg, 6, handshakeMsgLength - 6); if (string.IsNullOrEmpty(fileInfoStr)) { Logging.Error("FileInfo Error,response X'40'"); response[1] = 0x41; //Client Msg Error } else { var path = Path.Combine(FileServerDir, fileInfoStr); if (!File.Exists(path)) { response[1] = 0x44; //File Not Found } else { state.FileInfo = new FileInfo(path); state.FileSize = state.FileInfo.Length; state.DealingByteCount = 0; state.FileName = state.FileInfo.Name; //使用“|做分隔符” var fileLengthBytes = Encoding.UTF8.GetBytes(state.FileInfo.Length + "|"); response.AddRange(fileLengthBytes); state.Buffer = new byte[BufferSize]; } //config.FileSize = Convert.ToInt32(fileInfoArray[1]); } state.Connection.Send(response.ToArray()); if (response[1] != 0x10) { //Error state.Close(); } else { state.Connection.BeginReceive(state.Buffer, 0, state.Buffer.Length, SocketFlags.None, After2ndHandshakeCallback, state); } } catch (Exception e) { Logging.Debug("握手过程中发生异常"); Logging.LogUsefulException(e); state.Close(); } }
/// <summary> /// 文件下载服务处理 /// </summary> /// <param name="connection"></param> /// <param name="handshakeMsg"></param> /// <param name="handshakeMsgLength"></param> public void Download(Socket connection, byte[] handshakeMsg, int handshakeMsgLength) { if (closed) { return; } lastActivity = DateTime.Now; var state = new FileTransmitState { Connection = connection, }; try { List <byte> response = new List <byte> { 1, 0x10, 0 }; //Succeed msg var fileInfoStr = Encoding.UTF8.GetString(handshakeMsg, 6, handshakeMsgLength - 6); if (string.IsNullOrEmpty(fileInfoStr)) { Logging.Error("FileInfo Error,response X'40'"); response[1] = 0x41; //Client Msg Error } else { var path = Path.Combine(FileServerDir, fileInfoStr); if (!File.Exists(path)) { response[1] = 0x44; //File Not Found } else { state.FileInfo = new FileInfo(path); state.FileSize = state.FileInfo.Length; state.DealingByteCount = 0; state.FileName = state.FileInfo.Name; //使用“|做分隔符” var fileLengthBytes = Encoding.UTF8.GetBytes(state.FileInfo.Length + "|"); response.AddRange(fileLengthBytes); state.Buffer = new byte[BufferSize]; } //config.FileSize = Convert.ToInt32(fileInfoArray[1]); } state.Connection.Send(response.ToArray()); if (response[1] != 0x10) { //Error state.Close(); } else { state.Connection.BeginReceive(state.Buffer, 0, state.Buffer.Length, SocketFlags.None, After2ndHandshakeCallback, state); } } catch (Exception e) { Logging.Debug("握手过程中发生异常"); Logging.LogUsefulException(e); state.Close(); } }