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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2011, 19:00   #1
xil
Пользователь
 
Регистрация: 30.06.2009
Сообщений: 98
Стрелка Передача файла

Доброго времени суток.
Необходимо через сокет передать некоторое количество файлов
(первая попытка передачи файлов)
отправка
Код:
FileStream fileStream = new FileStream(fName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fileStream);
byte[] data = new byte[1024];

data = br.ReadBytes((int)fileStream.Length);

sendS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
try
{
     sendS.Connect(ip, port);

     ///отсылаем имя файла
     byte[] nameData = new byte[1024];
     nameData = Encoding.Unicode.GetBytes(fName);
     sendS.Send(nameData);

     ///отсылаем размер файла
     byte[] size = new byte[1024];
     string strSize = fileStream.Length.ToString();
     size = Encoding.Unicode.GetBytes(strSize);

     sendS.Send(size);

     ///отсылаем файл
     label1.Text = "Передано данных: " + sendS.Send(data);
}
catch (Exception ex) { MessageBox.Show("error", ex.Message); }
прием
Код:
TcpListener listener = new TcpListener(IPAddress.Any, 8491);
listener.Start();

while (isReceive)
{
     Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);

     s = listener.AcceptSocket();

     byte[] data = new byte[1024];
     //принимаем имя файла
     int count = 0;
     using (NetworkStream ns = new NetworkStream(s))
     {
          count = ns.Read(data, 0, 1024);
          string fileName = Encoding.Unicode.GetString(data, 0, count);

          count = ns.Read(data, 0, 1024);
          int size = Convert.ToInt32(Encoding.Unicode.GetString(data, 0, count));

          progressBar1.Value = 0;
          progressBar1.Maximum = size;

          using (Stream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
          {
               count = 0;
               //принимаем файл
               data = new byte[4096];
               int sum = 0;
               while (sum < size)
               {
                    count = ns.Read(data, 0, data.Length);
                    fs.Write(data, 0, count);
                    fs.Flush();
                    sum += count;
                    label1.Text = "Принято: " + sum;
                    progressBar1.Value = sum;
                    Application.DoEvents();
               }
          }
     }
}
Проблема в том что во входной сокет данные приходят не так как ты их отправлял а сплошным массивом и не получается их разделить (тут имя тут размер а тут сам файл дальше опять имя и т.д.). Подскажите в какую сторону копать
Как вы сформулируете вопрос так вам и ответят
xil вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача файла по сети sicil_proger C++ Builder 4 04.02.2011 13:06
Передача файла по сокетам bigmak Помощь студентам 1 24.03.2009 12:50
Передача файла.... prizrak1390 Работа с сетью в Delphi 1 23.12.2008 09:58
Передача текста файла.... prizrak1390 Общие вопросы Delphi 1 23.06.2008 10:58