Конференция "Сети" » Connected = False, а передача данных происходит !? [WinXP]
 
  • Alik (30.08.10 12:56) [0]
    Добрый день,

    Не могу понять в чем тут дело - я осуществляю TcpClient.Connect, после которого свойство Connected = False, но передача данных в обе стороны идет.
    Работаю в неблокирующем режиме.
    На другом конце стоит Линукс. Канал связи - интернет.
  • Anatoly Podgoretsky © (30.08.10 13:46) [1]
    > Alik  (30.08.2010 12:56:00)  [0]

    Ты справку то читаешь или нет?

    To close a socket, use the Close method.
  • Alik (30.08.10 14:14) [2]
    Наверное я так не сформулировал проблему:
    Мне нужно подключиться к серверу и после того как св-во TCPCLient.Connected установится в True, я по идее смогу обмениваться данными.

    В реальности, после запуска метода Connect, св-во Connected остается в значении False, я "закрываю глаза" на это дело и в наглую передаю и получаю информацию.

    По какой причине такое расхождение?
  • Alik (30.08.10 14:15) [3]
    Наверное я не так не сформулировал проблему:
    Мне нужно подключиться к серверу и после того как св-во TCPCLient.Connected установится в True, я по идее смогу обмениваться данными.

    В реальности, после запуска метода Connect, св-во Connected остается в значении False, я "закрываю глаза" на это дело и в наглую передаю и получаю информацию.

    По какой причине такое расхождение?
  • Alik (30.08.10 14:15) [4]
    Сорри!

    Наверное я не так сформулировал проблему:
    Мне нужно подключиться к серверу и после того как св-во TCPCLient.Connected установится в True, я по идее смогу обмениваться данными.

    В реальности, после запуска метода Connect, св-во Connected остается в значении False, я "закрываю глаза" на это дело и в наглую передаю и получаю информацию.

    По какой причине такое расхождение?
  • Медвежонок Пятачок © (30.08.10 15:05) [5]
    видимо потому что коннект - это асинхронный метод
  • Сергей М. © (30.08.10 15:12) [6]

    > св-во Connected остается в значении False, я "закрываю глаза"
    > на это дело и в наглую передаю и получаю информацию


    А вот наглеть в асинхронном неблок.режиме нельзя.
    Рано или поздно наглость будет наказана неработоспособностью программы в "боевых" условиях.
    Прием или передача должны начинаться не позже установки флага WriteReady при сброшенном флаге ExceptFlag. Флаги устанавливает  и сбрасывает метод Select
  • Alik (30.08.10 15:56) [7]

    > Сергей М. ©   (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 или не все так просто?
  • Сергей М. © (30.08.10 16:03) [8]
    Проще некуда.
    На то OnReceive и предназначено.
 
Конференция "Сети" » Connected = False, а передача данных происходит !? [WinXP]
Есть новые Нет новых   [134436   +26][b:0][p:0]