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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2012, 16:22   #1
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию Передача файлов по сокетам

Привет. Пишу чат использовав обычные сокеты. Решил добавить возможность передачи файлов, но как принять этот файл? В общем вот код:
Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if Client2.Address='' then exit;
m:=Fil;
if OpenDialog1.Execute=true then
begin
Stream.LoadFromFile(OpenDialog1.FileName);  
Client3.Socket.SendText('Fil');
Client2.Socket.SendStream(stream); 
Stream.Clear;
TrayIcon.ShowBalloonHint('ForterGo','Передан файл: ' + OpenDialog1.FileName,bitInfo,10);
end;
end;

procedure TForm1.Server2ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
if mode='Принять' then
...//бла-бла-бла
end;
Отправить я смог, а вот как принять этот поток, не знаю ,может подскажите кодом?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 27.11.2012, 22:35   #2
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

> Отправить я смог

Ты и отправить-то правильно не смог, о каком уж приеме при этом может идти речь)

Client3.Socket.SendText('Fil'); // не факт что текст будет передан
Client2.Socket.SendStream(stream);
Stream.Clear; // не факт что стрим полностью передан, а ты его уже чистишь
xoodoo вне форума Ответить с цитированием
Старый 28.11.2012, 11:54   #3
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от xoodoo Посмотреть сообщение
> Отправить я смог

Ты и отправить-то правильно не смог, о каком уж приеме при этом может идти речь)

Client3.Socket.SendText('Fil'); // не факт что текст будет передан
Client2.Socket.SendStream(stream);
Stream.Clear; // не факт что стрим полностью передан, а ты его уже чистишь
а мне надо его принять, но каким кодом?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 28.11.2012, 11:56   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Протокол общения клиентов на бумажке напиши сначала...
SendText('Fil'); - это не протокол это фигня...
например протокол (понимай диалог)
Код:
с1 - выбор файла для отправки
c1: <SendFileRequest id="1" name="Smile.gif" size="8096"/>
с2 - появление диалога о сохранении файла
c2: <SendFileConfirm id="1" chunk="1024"/>
c1: <SendFileChunk id="1" chunkid="1" chunksize="1024">Data</SendFileData>
c2: <SendFileChunkConfirm id="1" chunkid="1"/>
с1: <SendMsg id="1235">Лови мой файл</SendMsg>
c1: <SendFileChunk id="1" chunkid="2" chunksize="1024">Data</SendFileData>
c2: <SendMsgConfirm id="1235"/>
c2: <SendFileChunkConfirm id="1" chunkid="2"/>
например в данный протокол можно заложить докачку начав с нужного чанка
кроме того данный протокол не блокирует передачу чата, закачка и чат по очереди передают инфу
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 28.11.2012 в 12:01.
Slym вне форума Ответить с цитированием
Старый 28.11.2012, 12:44   #5
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Цитата:
мне надо его принять, но каким кодом?
Нельзя никаким кодом принять то что достоверно не передано.
xoodoo вне форума Ответить с цитированием
Старый 28.11.2012, 15:22   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

блин да передан паток, а мне надо его принять на серваке.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 28.11.2012, 16:53   #7
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Цитата:
блин да передан
Не передан.
Ты его кастрировал в момент передачи вызовом Clear.
xoodoo вне форума Ответить с цитированием
Старый 28.11.2012, 17:16   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от xoodoo Посмотреть сообщение
Не передан.
Ты его кастрировал в момент передачи вызовом Clear.
Тогда как узнать передан паток или нет?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 28.11.2012, 17:39   #9
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

После вызова SendStream не трогай переданный на отправку поток - не очищай его, не уничтожай и вообще более нигде этот поток не используй.

Последний раз редактировалось xoodoo; 28.11.2012 в 17:44.
xoodoo вне форума Ответить с цитированием
Старый 28.11.2012, 17:54   #10
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от xoodoo Посмотреть сообщение
После вызова SendStream не трогай переданный на отправку поток - не очищай его, не уничтожай и вообще более нигде этот поток не используй.
понятно. Ну а если я уберу очистку потока, как его потом принять?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача файла по сокетам grorg Работа с сетью в Delphi 8 23.09.2012 19:41
Передача файла по сокетам bigmak Помощь студентам 1 24.03.2009 12:50
Передача файлов Malder Общие вопросы .NET 2 03.11.2008 08:04
Передача файлов DM_bite Свободное общение 1 15.09.2008 16:22
Передача файлов wolff Работа с сетью в Delphi 3 03.03.2007 15:54