Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 22:42   #1
Sandman89
 
Регистрация: 17.12.2011
Сообщений: 4
Вопрос Передача файлов. Проблема с Deserialize

Здравствуйте, уважаемые программисты. Первый раз прошу помощи таким способом - в остальных всегда все сам добивал. Но дело очень мне не понятное. Вообщем необходимо создать программу для передачи файлов. Файлы передаются, но криво. В большинстве случаев вылазиет ошибка в методе Deserialize, в который я передаю NetworkStream. Ошибка такого рода:
"Недопустимый двоичный формат входного потока. Начало содержимого (в байтах): 01-00-01-00-00-00-FF-FF-FF-FF-01-00-00-00-00-00-00 ..."
Бывает раз на 6ой передача срабатывает. Т.е. сериализация проходит успешно. На вас вся надежда, курсач с места никак не сдвину.

Код отправителя:
Я его вызываю как отдельный поток, чтобы не нагружать прогу передачей больших файлов:

Код:
void Sender()
        {
            try
            {

                FileStream fs = new FileStream(FullName, FileMode.Open);
                byte[] buffer = new byte[8192];
                int bytes = 0;
                proccessed = 0;
                len = Convert.ToUInt64(fs.Length);
                byte[] bFSize = Encoding.ASCII.GetBytes(len.ToString());
                BinaryFormatter br = new BinaryFormatter();
                SoapFormatter sp = new SoapFormatter();
                myclient = new TcpClient("127.0.0.1", 7000);
                myclient.Client.Send(bFSize);
                myns = myclient.GetStream();
                int p = 1;
                if (p == myclient.Client.Send(ping))
                    br.Serialize(myns, FileName);


              //   sp.Serialize(myns, FileName);
                mysw = new BinaryWriter(myns);

                while (proccessed < len)
                {
                    if ((len - proccessed) < 8192)
                    {
                        bytes = (int)(len - proccessed);
                        byte[] buf = new byte[bytes];
                        fs.Read(buf, 0, bytes);
                        mysw.Write(buf, 0, bytes);
                        proccessed += Convert.ToUInt64(bytes);
                    }
                    else
                    {
                        fs.Read(buffer, 0, 8192);
                        mysw.Write(buffer, 0, 8192);
                        proccessed += 8192;
                    }
                }
                fs.Close();
                mysw.Close();
                myns.Close();
                myclient.Close();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                myth.Abort();
                myclient.Close();
            }

        }
Код получателя:
тоже в потоке

Код:
void File_Receiver()
        {
            string FullDir = textBox1.Text;
            mytcpl = new TcpListener(7000);
            mytcpl.Start();
            mysocket = mytcpl.AcceptSocket();
            mysocket.Receive(bFSize);
            string Size = Encoding.ASCII.GetString(bFSize);
            Size = Size.Remove(Size.IndexOf('\0'));
            UInt64 sz = Convert.ToUInt64(Size);
            UInt64 Processed = 0;
            myns = new NetworkStream(mysocket);
            BinaryFormatter br = new BinaryFormatter();
            // if (p == mysocket.Receive(ping))
            {
                op = br.Deserialize(myns); // Deserialize the Object from Stream
                try
                {

                    int bytes = 8192;
                    FileStream fss = new FileStream(FullDir + (string)op, FileMode.CreateNew, FileAccess.Write);
                    bb = new BinaryReader(myns);
                    while (Processed < sz)
                    {
                        if ((sz - Processed) < 8192)
                        {
                            bytes = (int)(sz - Processed);
                            byte[] buf = bb.ReadBytes(bytes);
                            fss.Write(buf, 0, bytes);
                        }
                        else
                        {
                            byte[] buffer = bb.ReadBytes(8192);
                            fss.Write(buffer, 0, buffer.Length);
                        }
                        Processed += 8192;
                    }
                    fss.Close();
                }

                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
            mytcpl.Stop();
            File_Receiver();


        }
Возможно нужна какая-то другая сериализация. Народ помогите, очень надо!!! Хоть советом небольшим

Последний раз редактировалось Sandman89; 17.12.2011 в 23:40.
Sandman89 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача файлов Вадим2011 C# (си шарп) 0 09.04.2011 23:21
VB передача файлов. Soutch_park Помощь студентам 0 16.01.2011 20:11
Передача файлов Lemo Помощь студентам 16 19.05.2010 17:39
Передача файлов. dradysman Фриланс 7 09.03.2010 12:27
Передача файлов wolff Работа с сетью в Delphi 3 03.03.2007 15:54