![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Indy и пересылка Stream [Win95/98, WinME, NT4, Win2k, WinXP]
Nostradamus © (2006-06-07 03:24:00)Есть Сервер с TIdCmdTCPServer и Клиент с TIdCmdTCPClient
По нажатию кнопки на клиенте он отсылает команду серверу в ответ на которую сервер шлёт Stream.
Делал так:
Клиент:
TCPClient.SendCmd('GETFILE');
M := TMemoryStream.Create;
try
TCPClient.IOHandler.ReadStream(M);
...
finally
M.Free;
end;
...
Сервер:
procedure TMain.TCPServerCommandHandlers2Command(ASender: TIdCommand);
var
F : TFileStream;
begin
ASender.Reply.NumericCode := 200;
ASender.Reply.Text.Text := 'OK, Sending file';
ASender.Disconnect := False;
ASender.SendReply;
F := TFileStream.Create(FileLocation, fmOpenRead);
try
ASender.Context.Connection.IOHandler.Write(F);
finally
F.Free;
end;
end;
Происходит следующее:
а) клиент говорит, что неверный Reply Code (TCPClient.SendCmd('GETFILE');)
б) клиент виснет напрочь на TCPClient.SendCmd('GETFILE');
Подскажите пожалуйста, в чём проблема, что я сделал не так.
Если тестировать спомощью Telnet, то всё работатет правильно.
П.С. Раньше я сетями никогда не занимался, так что не судите строго
Дмитрий Белькевич (2006-07-03 04:22:00) [1]Чуть выше, кстати, болтается ссылка на перевод книги 'indy inside' от г-на Погорецкого (за что ему отдельная благодарность), посмотри там. Книга прочитана, и забыта, как обычно ;)
Дмитрий Белькевич (2006-07-03 04:20:00) [2]Не знаю, честно говоря, как индей файло слать, не было необходимости, но поглядел на код - как я понимаю, нужно как минимум ответ забрать. Да и вообще - зачем отвечаешь? Попросил - в ответ поток. Всё. Вообще с индей примеров большая куча была, пересылка там должна быть.
Belorus (2006-07-02 22:04:00) [3]Актуально. У мну на ReadStream виснет
Nostradamus (2006-06-08 00:42:00) [4]засунул чтение в клиенте в Thread теперь прога не виснет, но и ничего не читается:
TCPClient.IOHandler.Readable возвращает всегда False
TCPClient.IOHandler.WaitFor - возбуждает исключение "Buffer start position is invalid"
Помогите разобраться, плиз, в чём ошибка?