void ReceiveProcess(Socket clientSocket) { try { if (m_bufQueue.Count <= 0) { return; } if (m_serverConnected == false) { return; } if (m_initiateTransfer == true) { File.AppendAllText("c:\\tcp.txt", "1 : " + m_bufQueue.Count.ToString() + Environment.NewLine); if (m_bufQueue.Count < m_fileSize) { return; } File.AppendAllText("c:\\tcp.txt", "2 : " + m_bufQueue.Count.ToString() + Environment.NewLine); m_bufQueue.read(readBuffer, m_fileSize); File.AppendAllText("c:\\tcp.txt", "3 : " + m_bufQueue.Count.ToString() + Environment.NewLine); m_binWriter.Write(readBuffer, 0, m_fileSize); File.AppendAllText("c:\\tcp.txt", "4 : " + m_bufQueue.Count.ToString() + Environment.NewLine); m_fileSize = 0; m_initiateTransfer = false; m_binWriter.Close(); m_binWriter = null; File.AppendAllText("c:\\tcp.txt", "5 : " + m_bufQueue.Count.ToString() + Environment.NewLine); if (m_bufQueue.Count < 6) { return; } File.AppendAllText("c:\\tcp.txt", "6 : " + m_bufQueue.Count.ToString() + Environment.NewLine); } m_bufQueue.read(readBuffer, 6); string str = Encoding.ASCII.GetString(readBuffer, 0, 6); string[] s = str.Split(new Char[] { '|' }); if (s[0] != "@") { return; } while (m_bufQueue.Count < int.Parse(s[1])) { Thread.Sleep(1); } m_bufQueue.read(readBuffer, int.Parse(s[1])); str = Encoding.ASCII.GetString(readBuffer, 0, int.Parse(s[1])); string[] jdata = str.Split(new Char[] { '|' }); if (jdata[0] != "sendcredintials" && m_userName != m_loginName && m_hasPassword != m_password) { string jData = m_wja.SendErrorMessage("TCP Server has rejected client credentials"); SendMessage(clientSocket, jData); return; } switch (jdata[0]) { case "sendcredintials": { } break; case "initiatefiletransfer": { m_fileTransferInfo = m_wja.DeserializeObject <ServerJsonApi.jFileTransfer>(jdata[1]); m_initiateTransfer = true; m_fileSize = int.Parse(m_fileTransferInfo.fileSize); string fieldDir = m_fileTransferInfo.DirectoryName.Substring("c:\\".Length); string pathOfFile = m_storageDirectory + "\\" + m_fileTransferInfo.guidName + "\\" + m_fileTransferInfo.userName + "\\" + fieldDir; if (Directory.Exists(pathOfFile) == false) { Directory.CreateDirectory(pathOfFile); } pathOfFile += "\\" + m_fileTransferInfo.fileName; m_binWriter = new BinaryWriter(File.Open(pathOfFile, FileMode.Create)); } break; } } catch (Exception err) { Console.WriteLine(err.Message); } }
public void SendFile(string fileName, string userName, string fieldGuid, DateTime startTimeToSend, ulong listNum, ulong fileNumber, ulong g360Index, string fileOwnerUserName, DateTime wtsDateTime) { try { Console.WriteLine("SendFile {0} {1} {2} ", fileName, userName, fieldGuid); if (m_sock == null) { m_connectionThread = new Thread(ConnectionThread); m_connectionThread.Start(); while (m_sock.Connected == false && m_running == true) { Thread.Sleep(10000); } if (m_sock.Connected == false) { return; } } using (BinaryReader b = new BinaryReader(File.Open(fileName, FileMode.Open))) { Console.WriteLine("File is opened"); int length = (int)b.BaseStream.Length; ServerJsonApi.jFileTransfer j = new ServerJsonApi.jFileTransfer(); j.fileName = Path.GetFileName(fileName); j.fileSize = length.ToString(); j.guidName = fieldGuid; j.userName = userName; j.DirectoryName = Path.GetDirectoryName(fileName); string jData = m_wja.InitiateFileTransfer(j); SendMessage(m_sock, jData); Console.WriteLine("InitiateFileTransfer is sent"); byte[] fileBuffer = new byte[length]; if (b.Read(fileBuffer, 0, length) != length) { Console.WriteLine("err"); } int count = length; while (m_sock.Poll(5000000, SelectMode.SelectWrite) == false) { Console.WriteLine("This Socket is not writable!"); } while (count > 0) { int size = m_sock.Send(fileBuffer, 0, count, SocketFlags.None); while (m_sock.Poll(5000000, SelectMode.SelectWrite) == false) { Console.WriteLine("This Socket is not writable 11!"); } Console.WriteLine("size = {0}", size); count -= size; } //m_bWriter.Write(fileBuffer, 0, length); //m_bWriter.Flush(); Console.WriteLine("Writer sent {0}", length); b.Close(); Console.WriteLine("Writer is closed"); } } catch (Exception err) { Console.WriteLine(err.Message); Console.ReadLine(); throw (new SystemException(err.Message)); } }