Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.017 c
14-94192
Ihor Osov'yak
2004-02-05 17:29
2004.02.29
Тема курсового по ОПП..


4-94227
OlegV
2003-11-04 13:36
2004.02.29
Перехват перехода по ссылке в IE


4-94239
SH
2003-12-22 12:59
2004.02.29
ActionManager - вкл./выкл кнопок панелей


14-94171
ИМХО
2004-02-07 16:03
2004.02.29
MS Word - исправления


6-94065
Danilin
2003-12-23 16:07
2004.02.29
Метод BeforeNavigate2




   Наверх