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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2010, 09:29   #1
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию tcpclient передача

Добрый день. Такой вопрос. Использую tcpclient для передачи строк и файлов. Строки передаются: tcpclient1.sendln(s); а вот с файлами беда.
Делаю примерно так:
Код:
p:byte;
f3: file of byte;
----------
while not eof(f3) do begin
read(f3,p);
tcpclient1.sendbuf(p,sizeof(p));
end;
Сам файл- pcx.
Подскажите в решении, плиз
varelik вне форума Ответить с цитированием
Старый 26.02.2010, 10:38   #2
JoanM
Дешево пишу проги)
Форумчанин Подтвердите свой е-майл
 
Аватар для JoanM
 
Регистрация: 12.12.2006
Сообщений: 106
По умолчанию Работай с потоками

У меня есть программы, реализованные на этих tcp-компонентах. Давно я их писал и не помню точно, как там, да что, но точно могу сказать, что тебе стоит работать с потоками (TFileStream).
типо:
Код:
var
str:TFileStream;
begin
str:=TFileStream.Create('test.pcx',foOpenRead);
str.seek(0);
tcpclient.sendstream(str);
100% я коряво написал этот код, но суть передал.

Еще способ:
Код:
var
str:tStringList;
begin
str:=tstringlist.create;
str.loadfromfile('test.pcx');
str.text:=str.text+'ћ';
tcpclient.sendln(str.text);
Потом в сервере (Ttcpserver) нужно найти параметр, который отвечает за конечный символ, т.е. тот, до которого он будет считывать информацию от клиента. Опять же не помню, где там это, но если тебе очень нужно, могу написать пример на Delphi.
Функция приема у сервера вроде TSocket.Readln(переменная, 'ћ');
JoanM вне форума Ответить с цитированием
Старый 26.02.2010, 11:49   #3
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Подскажите... А от севера клиенту как передать строчку? например команду послал, сервер обработал и в конце выдал клиенту исполнено.

отсылаю так и принимаю так

Код:
procedure TForm1.btn1Click(Sender: TObject);
begin
idtcpclnt1.Socket.WriteLn('sss');
end;

procedure TForm1.idtcpsrvr1Execute(AContext: TIdContext);
var
str:string;
begin
  str:=AContext.Connection.Socket.ReadLn;
  mmo1.Lines.Add(str);

end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 26.02.2010, 15:59   #4
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

чтото не работает через стрим, такое впеч. что не вся инфа передается
varelik вне форума Ответить с цитированием
Старый 27.02.2010, 06:49   #5
JoanM
Дешево пишу проги)
Форумчанин Подтвердите свой е-майл
 
Аватар для JoanM
 
Регистрация: 12.12.2006
Сообщений: 106
По умолчанию

Вот я у себя накорябал на скорую руку. Смотрите:
Код:
procedure TForm1.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
var
str,str2:tstringlist;
begin
str:=tstringlist.Create;
str2:=tstringlist.Create;
str2.Text:='То, что нужно отдать';
str.Text:=clientsocket.Receiveln('ћ');
if str.Text='command' then clientsocket.Sendln(str2.Text);
end;
Т.е. сервер при получении команды "command" во входящем сообщении отправляет клиенту буфер (текст) из str2.
Теперь рассмотрим получение клиентом. Пусть мы отправили серверу "command". Чтобы принять ответ, нам нужно в событии клиента OnReceive прописать:
Код:
procedure TForm1.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
  var DataLen: Integer);
var
str:tstringlist;
begin
str:=tstringlist.Create;
str.Text:=buf;
end;
И будет вам счастье!

А вообще вот что я вам скажу - не парьтесь с этими компонентами (к варелику относится) и юзайте INDY. Это и удобно, и надежно. Я только им пользуюсь, ощутив гемор TcpClient'а и сервера.
В случае с INDY надо делать по-другому. Там в сервере забивается список команд и ответов на них. Ну а суть приема/передачи примерно та же.

З.Ы. Не забываем за советы оставлять положительный отзыв обо мне.
JoanM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TCPClient, TCPServer : SendBufer() Zeraim Работа с сетью в Delphi 4 27.12.2009 21:22
Чат на TCPClient\TCPServer, передача файлов! AquaKlaster Работа с сетью в Delphi 3 18.05.2009 21:03
Передача файлов(exe) при помощи TCPServer и TCPClient Air Работа с сетью в Delphi 6 26.12.2008 23:26
TcpClient и TcpServer DOLBY Работа с сетью в Delphi 5 17.12.2007 10:43
TCPServer и TCPClient Antoha Работа с сетью в Delphi 19 06.10.2007 12:01