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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
8-94037
INext
2003-10-24 14:20
2004.02.29
Где достать Delphix 7


1-93961
Гиричев Руслан
2004-02-16 20:59
2004.02.29
Как выделить всю строку на которой находится курсор (в memo и ric


1-93942
Leksss
2004-02-17 17:57
2004.02.29
Иконки


1-93855
Grinder
2004-02-16 16:46
2004.02.29
Resize в ListView


6-94085
Perf
2003-11-17 18:47
2004.02.29
Прога, которая ищет все компы в локальной сети





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