Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
7-14311
Максимка
2002-06-27 06:55
2002.09.05
Как понизить число оборотов CD-ROM а?


7-14316
Dennisius
2002-06-20 17:39
2002.09.05
Kernel32


14-14240
Razpizdyi
2002-08-10 14:48
2002.09.05
MSDN - Что это за справка, и где ее искать?


14-14285
AlexAlex
2002-08-08 11:01
2002.09.05
Сервера приложений


14-14217
Fiend
2002-08-09 15:08
2002.09.05
Сертифицирование





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский