-
Добрый день,
Не могу понять в чем тут дело - я осуществляю TcpClient.Connect, после которого свойство Connected = False, но передача данных в обе стороны идет. Работаю в неблокирующем режиме. На другом конце стоит Линукс. Канал связи - интернет.
-
> Alik (30.08.2010 12:56:00) [0]
Ты справку то читаешь или нет? To close a socket, use the Close method.
-
Наверное я так не сформулировал проблему: Мне нужно подключиться к серверу и после того как св-во TCPCLient.Connected установится в True, я по идее смогу обмениваться данными.
В реальности, после запуска метода Connect, св-во Connected остается в значении False, я "закрываю глаза" на это дело и в наглую передаю и получаю информацию.
По какой причине такое расхождение?
-
Наверное я не так не сформулировал проблему: Мне нужно подключиться к серверу и после того как св-во TCPCLient.Connected установится в True, я по идее смогу обмениваться данными.
В реальности, после запуска метода Connect, св-во Connected остается в значении False, я "закрываю глаза" на это дело и в наглую передаю и получаю информацию.
По какой причине такое расхождение?
-
Сорри!
Наверное я не так сформулировал проблему: Мне нужно подключиться к серверу и после того как св-во TCPCLient.Connected установится в True, я по идее смогу обмениваться данными.
В реальности, после запуска метода Connect, св-во Connected остается в значении False, я "закрываю глаза" на это дело и в наглую передаю и получаю информацию.
По какой причине такое расхождение?
-
видимо потому что коннект - это асинхронный метод
-
> св-во Connected остается в значении False, я "закрываю глаза" > на это дело и в наглую передаю и получаю информацию
А вот наглеть в асинхронном неблок.режиме нельзя. Рано или поздно наглость будет наказана неработоспособностью программы в "боевых" условиях. Прием или передача должны начинаться не позже установки флага WriteReady при сброшенном флаге ExceptFlag. Флаги устанавливает и сбрасывает метод Select
-
> Сергей М. © (30.08.10 15:12) [6]
Спасибо! Делаю так:
with TcpPort, Client do begin Active := True; Select(@ReadReady, @WriteReady, @ExceptFlag, TimeOut); // ReadReady - Ïîðò îòêðûò äëÿ ÷òåíèÿ // WriteReady - Ïîðò îòêðûò äëÿ çàïèñè // ExceptFlag - Ïîðò íåäîñòóïåí if ExceptFlag then //Åñëè ïîðò îòêðûò begin Active := False; OutErrorMessage(F_Radar.Handle, errorSERVER_CONNECTION, False); Exit; end; end;
Сейчас все контролируется, единственное что еще для меня не ясно как собирать файл большого размера, если он передается по кусочкам?
Нужно тупо следить за количеством принятых байт в событии OnReceive или не все так просто?
-
Проще некуда. На то OnReceive и предназначено.
|