Exemple #1
0
        //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("Данные успешно отправлены!");
        }
Exemple #2
0
 public ReceiveEventArgs(SendInfo sendinfo, NetworkTransferObjects obj)
 {
     _sendinfo = sendinfo;
     _object   = obj;
 }