Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.05;
Скачать: CL | DM;

Вниз

Опять сокеты....   Найти похожие ветки 

 
Fenix   (2002-06-21 16:58) [0]

Всем привет!
На мой предидущий вопрос я так и не получил ответа... Но я чуть-чуть разобрался... У меня потоковый сервер и клиент.
Я посылаю файл серверу. Всё. Вроде послал. Но пока не закроешь программу сервер, файл не сохраняется на диске. Почему? И если сначала закрываешь клиент, то появляется ошибка и ничего не сохраняется. Почему? Может кто-нибудь хоть в этот раз подскажет, что делать...

Всем заранее спасибо!


 
Malder ©   (2002-06-21 21:55) [1]

ну приведи код сохранения файла. Мы ж не телепаты...
может ты closefile забыл сделат или вроде того...


 
Fenix   (2002-06-22 09:23) [2]

>Malder
Вот моя функция принятия файла:

procedure TMyServerThread.ClientExecute;
var MySocket: TWinSocketStream;
myfile: TFileStream;
begin
myfile := TFileStream.Create("received.txt",fmOpenWrite or fmCreate);
MySocket := TWinSocketStream.Create(ClientSocket, 1000);
try
while (not Terminated) and ClientSocket.Connected do begin
If MySocket.WaitForData(1000) then
If myfile.CopyFrom(MySocket,1024) = 0 then break;
end;
finally
MySocket.Free;
ClientSocket.Close;
myfile.Free;
end;
end;


 
Malder ©   (2002-06-22 15:59) [3]

Что-то я не понял ничего. Как-то странно ты передаешь файлы. Почитай на этом сайте FAQ - там вроде есть примеры как посылать файлы.
А то вот, что у тебя в коде за ClientSocket.Connected ? Что за ClientSocket ? Это же вроде программа сервер ? Непонятно...
и вообще, какой ты компонент для работы с сокетами используешь ?


 
Fenix   (2002-06-22 16:42) [4]

>Malder
ClientSocket: TServerClientWinSocket;
А использую я TClientSocket и TServerSocket,
это синхронная передача данных.


 
jasper   (2002-06-22 18:38) [5]

да да я тоже это использую и меня тоже проблема не могу переслать, а у тебя (fenix) пересылает??? мне нужно переслать от сервера к клиенту!


 
Fenix   (2002-06-22 19:05) [6]

>jasper
У меня от клиента серверу отправляется, но файл сохраняется,
только если сначала закрыть сервер.


 
Malder ©   (2002-06-22 22:01) [7]

А что такое TMyServerThread ?
Я просто не понимаю, что ты делаешь. Вот ты объявляешь MySocket: TWinSocketStream. Потом пытаешься через него получить данные... А на каком порту будет слушать сокет ? Неужели это работать может ?!

Вот как я понимаю прием файлов:

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var l: Integer;
buf: PChar;
src: TFileStream;
begin
{Записываем в l размер полученного блока}
l := Socket.ReceiveLength;
{Заказываем память для буфера}
GetMem(buf,l+1);
{Записываем в буфер полученный блок}
Socket.ReceiveBuf(buf,l);
{Открываем временный файл для записи}
src := TFileStream.Create("myfile.tmp",fmOpenReadWrite);
{Ставим позицию в конец файла}
src.Seek(0,soFromEnd);
{Записываем буфер в файл}
src.WriteBuffer(buf,l);
{Закрываем файл}
src.Free;
{Освобождаем память}
FreeMem(buf);
end;


 
Fenix   (2002-06-23 15:10) [8]

>Malder
Источник нашего непонимания друг друга - это то,
что твой метод передачи( наверное правильно выразился:) )
асинхронный, а мой синхронный, так что у меня НЕ МОГУТ
происходить события типа ClientSocket1Read.


 
Malder ©   (2002-06-23 15:36) [9]

А-а-а. Понял.
Скажи тогда. Что за TMyServerThread ?
Какого класса ?


 
Fenix   (2002-06-23 16:30) [10]

>Malder
TMyServerThread = class(TServerClientThread)
procedure ClientExecute; override;
end;

А твой способ работает? Покажи процедуру отправки файла!


 
jedi ©   (2002-06-23 16:35) [11]

lu4she ustanovi indy9 i smotri primeri. tam delatsea namnogo proshe i rabotaet lu4she.


 
Fenix   (2002-06-23 16:45) [12]

Что за indy и где это достать?


 
Malder ©   (2002-06-23 18:15) [13]

Fenix, если ты пользуешься D6 то там Indy встроено.

Отправка файла:

procedure SendFileBySocket(filename: string);
var srcfile: TFileStream;
begin
{Открываем файл filename}
srcfile := TFileStream.Create(filename,fmOpenRead);
{Посылаем его первому подключенному клиенту}
ServerSocket1.Socket.Connections[0].SendStream(srcfile);
{Закрываем файл}
srcfile.Free;
end;


Имхо, намного удобней.


 
Fenix   (2002-06-23 18:19) [14]

>Malder
И у тебя это всё работает? (посылка и принятие)


 
Malder ©   (2002-06-23 21:21) [15]

А у тебя разве нет ?


 
jasper   (2002-06-24 13:40) [16]

у меня нет!!! я взял твой код установил как надо, и нифига, у меня почемуто рвется соединение когда хочу скопировать файл...


 
jasper   (2002-06-24 13:40) [17]

у меня нет!!! я взял твой код установил как надо, и нифига, у меня почемуто рвется соединение когда хочу скопировать файл...
это должно работать когда у сервера и клиента стоит nonblocking?


 
Fenix   (2002-06-25 18:07) [18]

Да, у меня тоже не работает! Ну ПОМОГИТЕ ЖЕ КТО-НИБУДЬ!!!!!!!!!!!!!!!!


 
Malder ©   (2002-06-25 18:22) [19]

Хех. И у меня что-тo стало тоже не работать, ошибка при Socket.ReceiveBuf - отчего вдруг...
влом разбираться сейчас...


 
jasper   (2002-06-25 21:03) [20]

блин ну не дайте зациклиться на этом помогите, разберитесь, а то щас сдохну :)


 
Malder ©   (2002-06-26 00:13) [21]

Почитай http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988620989&n=20
мож поможет...


 
jedi ©   (2002-06-26 00:33) [22]

mogu prislat" primer s ispol"zovaniem indy


 
jasper   (2002-06-26 12:26) [23]

пришли пжалста мне на nightboy2000@mail.ru исходник, а же лательно и на socker клиен-сервер, у меня d5 там есть indy?


 
Fenix ©   (2002-06-26 16:12) [24]

Пришли мне тоже плиз!!!
CoolFenix@yandex.ru


 
jedi ©   (2002-06-26 17:00) [25]

indy est" mojno dlea D5 mojno ska4at" s http://www.nevrona.com/indy/.
ya rabotaiu s versiei 9.0.1(vrode ona rabotaet stabil"no ia tam est" vseo 4to mne nujno). Est" i bolie pozdnie, mojete poprobovat".

Primeri prishliu ve4erom ili utrom.



Страницы: 1 вся ветка

Текущий архив: 2002.09.05;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
3-13978
Виктор12345567
2002-08-15 08:42
2002.09.05
Подключение DOS FOXPRO таблиц к Delphi


4-14344
ReYka
2002-06-28 12:19
2002.09.05
Как перехватить запуск любого приложения? И еще...


14-14231
wicked
2002-08-08 21:16
2002.09.05
delphi-jedi


1-14013
EugenCFG
2002-08-26 12:10
2002.09.05
Каким образом можно заменить строку в файле...


14-14226
angelcom
2002-08-08 19:27
2002.09.05
Help my! Где найти LMD for Delphi 6