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

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

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2016, 21:01   #1
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
Стрелка Передать файл по сети в делфи.

var
Form16: TForm16;
mm:TMemoryStream;

код отправить:
var m:TMemoryStream;
begin
m:=TMemoryStream.Create;
m.LoadFromFile('Project7.exe');
m.Position:=0;
Edit1.Text:=IntToStr(m.Size);
ClientSocket1.Socket.SendStream(m);
end;

принять:
s:=Socket.ReceiveText;
mm.Write(s[1],Length(s));
if mm.Size=StrToInt(Edit1.Text) then
mm.SaveToFile('23423432.exe');

Я очень простой пример перессылки файла. Пользуюсь ClientSocket1 и ServerSocket1. Клиент и сервер в 1 приложении. Я пока просто разбераюсь. Файл приходит, размер совпадает, но он порченый. Как исправить?
Legeardo вне форума Ответить с цитированием
Старый 04.10.2016, 22:03   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Передавать размер данных или признак конца данных. И прием сделайте в цикле, так как во время передачи ОС разобьет ваши данные на произвольные порции, а собрать на приемной стороне забудет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 05.10.2016, 15:42   #3
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
По умолчанию

я же вот проверяю
if mm.Size=StrToInt(Edit1.Text) then
mm.SaveToFile('23423432.exe');
Я это делаю в 1 приложение пока что
Legeardo вне форума Ответить с цитированием
Старый 05.10.2016, 17:51   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

ReceiveText - получает текст, а передаёте вы бинарные файлы конечно у вас портятся данные.
Используйте подобный код:
Код:
Var buffer:array [4096] of byte;
...
BlockSize:=ClientSocket.ReceiveBuf(Buffer,SizeOf(buffer));
mm.Write(Buffer[0],BlockSize);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 05.10.2016, 18:27   #5
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
По умолчанию

Спасибо! Заработало!
Legeardo вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать файл по сети Janger Общие вопросы Delphi 2 01.09.2014 10:22
Передать публичный ключ по сети gunsoy C/C++ Сетевое программирование 1 08.04.2014 12:19
Возможно ли, передать по сети (в потоке), и не сохраняя в файл (длл), использовать исполняемый код? alextrof94 Общие вопросы Delphi 3 30.10.2013 18:33
Передать wchar_t* из Си dll в Делфи приложение. spamer Общие вопросы C/C++ 9 27.01.2012 01:04
Передать статический record по сети Toland2 Работа с сетью в Delphi 0 24.10.2011 18:30