Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

Проблемы c TIdTCPServer и TIdTCPClient   Найти похожие ветки 

 
Интересующийся   (2006-07-04 16:51) [0]

Доброе время суток мастера!

Помогите плиз.

Создал простое приложение (сервер) на основе TIdTCPServer, назначил ему 80 порт.

При обращении к серверу с помощью Оперы все работает, а при обращении к нему при помощи TIdTCPClient возникают ошибки.

Примеры кода, взяты из книги про D7

Сервер

procedure Execute(AThread:TIdPeerThread);
begin

 with AThread.Connection do
 begin
 TextLog.Lines.Add("ReadBuffer "+AThread.Connection.CurrentReadBuffer);
 WriteLn("OK");//Ответ сервера клиенту
 Disconnect;
 end;

end;


Клиент

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
TCPClient.Connect;
TCPClient.Write("OK");
TextLog.Text:=TCPClient.ReadLn;
TCPClient.Disconnect;
end;


 
Slym ©   (2006-07-05 09:57) [1]

Интересующийся   (04.07.06 16:51)
возникают ошибки.

пою...
 Ошибки бывают разные...
 Синие, белые, красные...

Ошибка где (клиент/сервер), ее название/код, место возбуждения...
Исключая сервер проверенный оперой, ошибка в клиенте... ориентировочно на строке TCPClient.Write("OK");?


 
Slym ©   (2006-07-05 10:00) [2]

но это на первый взгляд...
коробить другое: полное отсутствие протокола (договоренности между клиентом и сервером о передаче данных), а именно:
TextLog.Lines.Add("ReadBuffer "+AThread.Connection.CurrentReadBuffer);


 
medved_68 ©   (2006-07-05 10:07) [3]


> TCPClient.Connect;
> TCPClient.Write("OK");

Сомнения что клиент успел приконнектится
Думаю что TCPClient.Write("OK"); надо прописывать в событии TCPClient.Connected;


 
Slym ©   (2006-07-05 11:29) [4]

medved_68 ©   (05.07.06 10:07) [3]
Сомнения что клиент успел приконнектится

Успел... Indy - синхронная: из TCPClient.Connect; не выйдет пока тот самый Коннект не установится


 
medved_68 ©   (2006-07-05 12:22) [5]


> Slym

Тогда ой, остается [2], типа сервер что то неправильно считал

> TextLog.Lines.Add("ReadBuffer "+AThread.Connection.CurrentReadBuffer);

По ходу он пытается в строку запихнуть весь буфер????


 
umbra ©   (2006-07-05 19:15) [6]

ошибку то какую пишет?


 
Интересующийся   (2006-07-07 19:00) [7]

Код посылающий сообщения (Пример из книги С. Бобровский Delphi 7)

procedure TForm1.SpeedButton1Click(Sender:TObject);
begin
TCPClient.Connect;
TCPClient.Write("HELLO");                  //В примере Edit1.Text
TextLog.Lines.Add(TCPClient.ReadLn);//Edit1.Text:=TCPClient.ReadLn
TCPClient.Disconnect;
end;


Код сервера (Пример из книги С. Бобровский Delphi 7)

procedure TForm1.TCPServerExecute(AThread:TIdPeerThread);
begin

 with AThread.Connection do
 begin
 TextLog.Lines.Add(AThread.Connection.CurrentReadBuffer);
 WriteLn("OK");
 Disconnect;
 end;

end;


P.S.
C оперой работает нормально, опера получает OK!
При работе с моим клиентом есть два варианта:
1. По книге - на сервере происходит Execute из которого нет выхода (клиент виснит).
2. Переносим TCPClient.Write("HELLO") в TCPClientConnected, сервер получает текст. Клиент ответа не получает, TCPClientDisconnected не происходит.


 
medved_68 ©   (2006-07-08 16:14) [8]

with AThread.Connection do
begin
TextLog.Lines.Add(AThread.Connection.CurrentReadBuffer);
WriteLn("OK");
Disconnect;
end;


Попробуй убрать из процедуры Disconnect; Т.Е пусть сам клиент соединяется  и сам же рвет связь. Вероятней всего идет разрыв связи до того как передалось сообщение. На сервере оно уже отправлено и разрыв, а клиент еще не принял а уже разрыв.(Только предположение...).

> Клиент ответа не получает, TCPClientDisconnected не происходит.

Укрепляюсь в предположении т.к. клиент ждет ответа от сервера и сообщение о разрыве в этот момент в очереди но не обрабатывается (ИНДИ синхронная).


 
XbI   (2006-07-09 09:37) [9]

во-первых используй клнструкцию try...except, во-вторых попробуй так:
procedure TForm1.SpeedButton1Click(Sender:TObject);
begin
try
  TCPClient.Connect;
except
end;
if TcpClient.Connection.Connected then begin
  TCPClient.WriteLn("HELLO");                  //В примере Edit1.Text
  TextLog.Lines.Add(TCPClient.ReadLn);//Edit1.Text:=TCPClient.ReadLn
end;

  TCPClient.Disconnect;
end;
end;


 
XbI   (2006-07-09 09:38) [10]

procedure TForm1.SpeedButton1Click(Sender:TObject);
var
s: string;
begin
try
 TCPClient.Connect;
except
end;
if TcpClient.Connection.Connected then begin
 TCPClient.WriteLn("HELLO");                  //В примере Edit1.Text
 s:=TCPClient.ReadLn;
 TextLog.Lines.Add(s);//Edit1.Text:=TCPClient.ReadLn
end;

 TCPClient.Disconnect;
end;
end;


 
Интересующийся   (2006-07-12 16:15) [11]

> XbI   (09.07.06 09:38) [10]


if TcpClient.Connection.Connected then begin


[Error] Unit1.pas(49): Undeclared identifier: "Connection"

Connection - это насколько я понимаю серверная вещь?


 
Интересующийся   (2006-07-12 16:16) [12]

Может в сервере ошибка?


 
Интересующийся   (2006-07-12 16:23) [13]

Клиент вроде работает:

var
s: string;
begin

try
TCPClient.Connect;
TCPClient.WriteLn("HELLO");                  //В примере Edit1.Text
s:=TCPClient.ReadLn;
TextLog.Lines.Add(s);//Edit1.Text:=TCPClient.ReadLn
TCPClient.Disconnect;
except
end;



 
medved_68 ©   (2006-07-12 16:45) [14]


> Интересующийся


> Может в сервере ошибка?

[8] посмотри


 
Интересующийся   (2006-07-13 07:33) [15]

Вроде все работает, только у сервера возникает ошибка при двух его копиях.

Сервер позволяет запускать две копии с Active:=True?

P.S.
Может кто знает как определить занят ли порт другим TIdTCPServer.


 
Интересующийся   (2006-07-13 07:38) [16]

Может, кто знает, как поместить TIdTCPServer и TIdTCPClient в OLE?

Мне нужно получить к ним доступ из другой проги (чужой)!


 
Slym ©   (2006-07-13 08:31) [17]

Интересующийся   (13.07.06 7:38) [16]
в OLE

Берешь и помещаешь... принципиальных проблем не вижу (если ты знаком с OLE)


 
Интересующийся   (2006-07-15 09:06) [18]

Основы работы с OLE знаю, но работ в этой области пока нет :(

Нужна инфа по написанию подобных вещей.

P.S.
Конкретно я хочу написать DLL (или EXE, как более простой вариант) которые можно вызвать из другой программы. В качестве других программ подайдут 1С7.7 или Excel.


 
Интересующийся   (2006-07-15 09:10) [19]

В конечном счете в DLL должны входжить серверы и клиенты для работы с HTTP, FTP, MAIL (POP и SMTP).



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

Форум: "Сети";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.057 c
9-1139318589
Omar2002
2006-02-07 16:23
2006.12.03
Восстановление после Alt+Tab or Win+D


10-1126629436
mvs
2005-09-13 20:37
2006.12.03
Отключение перерегистрации сервера автоматизации при запуске


15-1163579648
khushik
2006-11-15 11:34
2006.12.03
Клиент сервер


15-1163507570
Юрий Зотов
2006-11-14 15:32
2006.12.03
Прошу помочь :о)


2-1163522915
SergeySP
2006-11-14 19:48
2006.12.03
Как распознать ошибку





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский