private void SendReqest(ProtocolOfExchange req, NetworkTransferObjects obj, TcpModule tcp) { if (m_IsConnectedToServer || req == ProtocolOfExchange.CheckConnection) { // m_tcpModule.Receive += Tcp_Receive; tcp.SendData(obj, req); } }
private void SendReqest(ProtocolOfExchange req, NetworkTransferObjects obj) { if (m_IsConnectedToServer || req == ProtocolOfExchange.CheckConnection) { obj.ProtocolMessage = req; m_TcpClient.Send(obj); } }
//public string SendFileName = null; public void SendData(NetworkTransferObjects obj, ProtocolOfExchange protokolMsg) { // Состав отсылаемого универсального сообщения // 1. Заголовок о следующим объектом класса подробной информации дальнейших байтов // 2. Объект класса подробной информации о следующих байтах // 3. Байты непосредственно готовых к записи в файл или для чего-то иного. try { SendInfo si = new SendInfo(); si.ProtocolMsg = protokolMsg; // Если нет сообщения и отсылаемого файла продолжать процедуру отправки нет смысла. //if (si.message == null && obj==null) return; byte[] _obj_arr;// = new byte[10]; if (obj != null) { BinaryFormatter _bf = new BinaryFormatter(); MemoryStream _ms = new MemoryStream(); _bf.Serialize(_ms, obj); si.datasize = (int)_ms.Length; _obj_arr = _ms.ToArray(); _ms.Close(); } else { si.datasize = 0; _obj_arr = null; } BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); bf.Serialize(ms, si); ms.Position = 0; byte[] infobuffer = new byte[ms.Length]; int r = ms.Read(infobuffer, 0, infobuffer.Length); ms.Close(); byte[] header = GetHeader(infobuffer.Length); byte[] total = new byte[header.Length + infobuffer.Length + si.datasize]; Buffer.BlockCopy(header, 0, total, 0, header.Length); Buffer.BlockCopy(infobuffer, 0, total, header.Length, infobuffer.Length); // Если путь файла указан, добавим его содержимое в отправляемый массив байтов if (si.datasize > 0 && _obj_arr != null) { Buffer.BlockCopy(_obj_arr, 0, total, header.Length + infobuffer.Length, si.datasize); } // Отправим данные подключенным клиентам NetworkStream ns = _tcpClient.tcpClient.GetStream(); // Так как данный метод вызывается в отдельном потоке рациональней использовать синхронный метод отправки ns.Write(total, 0, total.Length); // Обнулим все ссылки на многобайтные объекты и попробуем очистить память header = null; infobuffer = null; total = null; //Parent.labelFileName.Text = ""; GC.Collect(); GC.WaitForPendingFinalizers(); } catch (Exception e) { SoundError(e.Message); } // Подтверждение успешной отправки // Parent.ShowReceiveMessage("Данные успешно отправлены!"); }