Форум: "Сети";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
ВнизОпять сокеты.... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c