Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

Обратная связь для сокетов   Найти похожие ветки 

 
alexEagle ©   (2003-12-23 14:20) [0]

Добрый день!
Помогите пожалуйста реализовать вызов функции через сокет.
Т.е нужно реализовать функццию GetResponse(strParam: string):string, которая

1) выполняет передачу параметров функции (strParam) серверу в текстовом формате через
сокет (FSocket.Socket.SendText(strParam))

2) ждет ответа от сервера

3) возвращает ответ как результат своей работы (result := FSocket.Socket.ReceiveText)
и заканчивает свое выполнение.

Не могу придумать как заставить функцию ожидать ответа от сервера (этап 2).

С уважением, Сорокин А.Е.


 
Digitman ©   (2003-12-23 14:23) [1]

режим гнезда какой ? блокирующий или неблокирующий ?


 
Reindeer Moss Eater ©   (2003-12-23 14:23) [2]

begin
//Передаем параметры:
idTcpClient.Writeln(strParam);
//Читаем результат
Response:=idTcpClient.ReadLn;
end;


 
Digitman ©   (2003-12-23 14:39) [3]


> Reindeer Moss Eater


у него ж - TServer/ClientSocket-классы

там же не реализована подобная логика, чистой воды - транспорт... там это самому творить нужно


 
Reindeer Moss Eater ©   (2003-12-23 14:40) [4]

Я его подталкиваю к использованию синхронных методов.


 
alexEagle ©   (2003-12-23 15:00) [5]

Мне не хотелось бы переписывать программу на Indy компоненты, поскольку от них я уже отказался в прошлый раз ( http://delphimaster.net/view/6-1072097132/).
Сейчас пользуется компонет TClientSocket

Режим гнезда не блокирующий, но я готов сменить если будет толк.
В хелпе читал но не смог понять как эфективно работать с этим режимом. Подскажите пожалуйста, лучше примером.


 
Reindeer Moss Eater ©   (2003-12-23 15:05) [6]

Мне не хотелось бы переписывать программу на Indy компоненты, поскольку от них я уже отказался в прошлый раз

Я его подталкиваю к использованию синхронных методов.

Я не подталкиваю к Indy. Я подталкиваю к синхронным методам и режимам.


 
S@shka ©   (2003-12-23 15:49) [7]

Все что тебе нужно это INDY - там реализованы необходимые принципы работы.
Или придется самому изобретать велосипед.
Reindeer Moss Eater -> ПРАВ!


 
alexEagle ©   (2003-12-23 16:01) [8]

Indy нет хочу использовать. Можно примерчик как реализовать ожидание ответа от сервера.

Сейчас меня используется следующий вариант:

constructor TPosClient.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSocket := TClientSocket.Create(AOwner);
FSocket.OnRead := OnGetResponse;
FResponse := False;
end;

procedure TPosClient.OnGetResponse(Sender: TObject; Socket: TCustomWinSocket);
begin
FResponse := true;
end;

function TPosClient.SendCommand(strRequest: string; var strResponse: string): string;
var
strText: string;
begin
// Отправка команды
FSocket.Socket.SendText(strRequest);

// Ожидание ответа
while not FResponse do begin
end;
FResponse := false;

// Получение ответа
strText := FSocket.Socket.ReceiveText;
strResponse := Copy(strText,5,Length(strText)-4);
result := Copy(strText,1,4);
end;


 
Polevi ©   (2003-12-23 16:16) [9]

constructor TPosClient.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSocket := TClientSocket.Create(AOwner);
FSocket.ClientType=ctBlocking;
end;

function TPosClient.SendCommand(strRequest: string; var strResponse: string): string;
begin
FSocket.Socket.SendText(strRequest);
Result:=FSocket.Socket.ReceiveText;
end;


 
S@shka ©   (2003-12-23 16:18) [10]

Иначе это делается вот так...
1. тип сокета nonBlocking!!!

Отправил комманду
постаавил RecvAnsw = False;
в событие onClientRead делаешь
получить ответ
поставить ResvAnsw = True;
у тебя в цикле вроде тоже самое и есть....
ТОлько надо предусмотреть возможность того что ответ может не прийти
(из-зха ошибок :) а то зациклешься



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

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
14-94164
VID
2004-02-07 23:13
2004.02.29
WORD достал!


3-93792
Delph
2004-02-02 17:26
2004.02.29
MSSQL2000


6-94086
Alex21
2003-12-25 15:13
2004.02.29
Помогите с айпишником


14-94163
Гость965
2004-02-08 02:58
2004.02.29
Как стать сертифицированым специалистом


7-94214
NetKnight
2003-12-07 17:25
2004.02.29
Програмный Log off в Windows XP