Форум: "Сети";
Текущий архив: 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