![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Connected = False, а передача данных происходит !? [WinXP]
Alik © (2010-08-30 12:56:00)Добрый день,
Не могу понять в чем тут дело - я осуществляю TcpClient.Connect, после которого свойство Connected = False, но передача данных в обе стороны идет.
Работаю в неблокирующем режиме.
На другом конце стоит Линукс. Канал связи - интернет.
Сергей М. (2010-08-30 16:03:00) [1]Проще некуда.
На то OnReceive и предназначено.
Alik (2010-08-30 15:56:00) [2]
> Сергей М. © (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 или не все так просто?
Сергей М. (2010-08-30 15:12:00) [3]
> св-во Connected остается в значении False, я "закрываю глаза"
> на это дело и в наглую передаю и получаю информацию
А вот наглеть в асинхронном неблок.режиме нельзя.
Рано или поздно наглость будет наказана неработоспособностью программы в "боевых" условиях.
Прием или передача должны начинаться не позже установки флага WriteReady при сброшенном флаге ExceptFlag. Флаги устанавливает и сбрасывает метод Select
Медвежонок Пятачок (2010-08-30 15:05:00) [4]видимо потому что коннект - это асинхронный метод
Alik (2010-08-30 14:15:00) [5]Наверное я нетак не сформулировал проблему:
Мне нужно подключиться к серверу и после того как св-во TCPCLient.Connected установится в True, я по идее смогу обмениваться данными.
В реальности, после запуска метода Connect, св-во Connected остается в значении False, я "закрываю глаза" на это дело и в наглую передаю и получаю информацию.
По какой причине такое расхождение?
Alik (2010-08-30 14:15:00) [6]Сорри!
Наверное я не так сформулировал проблему:
Мне нужно подключиться к серверу и после того как св-во TCPCLient.Connected установится в True, я по идее смогу обмениваться данными.
В реальности, после запуска метода Connect, св-во Connected остается в значении False, я "закрываю глаза" на это дело и в наглую передаю и получаю информацию.
По какой причине такое расхождение?
Alik (2010-08-30 14:14:00) [7]Наверное я так не сформулировал проблему:
Мне нужно подключиться к серверу и после того как св-во TCPCLient.Connected установится в True, я по идее смогу обмениваться данными.
В реальности, после запуска метода Connect, св-во Connected остается в значении False, я "закрываю глаза" на это дело и в наглую передаю и получаю информацию.
По какой причине такое расхождение?
Anatoly Podgoretsky (2010-08-30 13:46:00) [8]> Alik (30.08.2010 12:56:00) [0]
Ты справку то читаешь или нет?
To close a socket, use the Close method.