Конференция "Сети" » Почему сообщения отсылаются не попорядку?... =((( [D7, WinXP]
 
  • Andrewtitoff © (14.02.08 22:31) [0]
    Здравствуйте!, я использую пару клиент-сервер для реализации чего то вроди чата с расширенныли функциями

    Вот часть кода:

    ......
    procedure TMyChat.SendCommand(s:string);
    begin
    TcpClient1.Active := True;
     try
       if TcpClient1.Connect then
         begin
         TcpClient1.Sendln(s);
         Edit.Clear;
         end;
     finally
       TcpClient1.Disconnect;
     end;
    end;
    .............
    procedure TMyChat.Button1Click(Sender: TObject);
    var
    c : boolean;
    begin
    Display.Lines.Add(Edit.Text);
    ........
    if UpperCase(Edit.Text) ='DIR' then
    Begin
    SendCommand('Command : DIR');
    c:=true;
    end;
    ..........
    procedure TMyChat.TcpServer1Accept(Sender: TObject;
     ClientSocket: TCustomIpClient);
    var
    .......
    begin
    try
    CurrentCommand:=ClientSocket.Receiveln;
    Display.Lines.Add('Server : '+CurrentCommand);
    .........
    if CurrentCommand='Command : DIR' then
    begin
       GetDir(0,CurrentDir);
       SEndCommand('Директория : '+CurrentDir);
       SEndCommand('-------------------------------------');
      if FindFirst(CurrentDir + '\*.*', faAnyFile, tt) = 0 then
      begin
        repeat
          if tt.Attr = faDirectory then
          SendCommand('[DIR]'+tt.Name)else
          SendCommand(tt.Name+' [Size : '+inttostr(tt.SIZE)+']');
        until FindNext(tt) <> 0;
        FindClose(tt);
      end;
       SEndCommand('Конец-------------------------------');
    end;
    ......
    except
      on E:Exception do
      begin
        if ClientSocket.Connected then
          ClientSocket.Sendln('-ERR Raised exception with message: '+E.Message)
        else
          raise;
      end;
    end;
    CurrentCommand:='';
    end;




    а получается иногда нормально, но чаще байда на пример такая:

    dir
    Server : Директория : C:\Documents and Settings\Felix\Рабочий стол\EXT_New !!!_My_Chat_TcpServer&TcpClient
    Server : My_Chat.dpr [Size : 238]
    Server : [DIR]..
    Server : [DIR].
    Server : -------------------------------------
    Server : My_Chat.dproj [Size : 3054]
    Server : My_Chat.dproj.local [Size : 1850]
    Server : My_Chat.exe [Size : 494080]
    Server : My_Chat.identcache [Size : 199]
    Server : My_Chat.res [Size : 5280]
    Server : My_Chat_.dcu [Size : 19486]
    Server : My_Chat_.dfm [Size : 2279]
    Server : My_Chat_.pas [Size : 8260]
    Server : Конец-------------------------------
  • ketmar © (14.02.08 22:37) [1]
    ну, не делай «байды».

    собственно — а что не так? (помимо неверной работы с FindXXX)

    ---
    Understanding is not required. Only obedience.
  • Andrewtitoff © (14.02.08 22:44) [2]
    2 ketmar
    Сообщения выводятся не в том порядке, в котором я их отправляю...
    А что не так с FindXXX?
  • ketmar © (15.02.08 02:51) [3]
    >[2] Andrewtitoff © (2008-02-14 22:44:00)
    порядок даже не пытался ачмоиовать.

    п с финдом… хэдп читал? я вижу, что нет.

    ---
    Understanding is not required. Only obedience.
  • ketmar © (15.02.08 02:52) [4]
    тьфу!

    ---
    Understanding is not required. Only obedience.
  • Slym © (15.02.08 06:10) [5]
    Andrewtitoff ©   (14.02.08 22:31)
    SendCommand

    Ты забыл добавить что долго отправляет/принамает еще...
    твой SendCommand обрывает соединение
    finally
      TcpClient1.Disconnect;
    end;


    и отправка идет в несколько соединений, а тут порядок никто не гарантирует!
    если заменить SendCommand на TcpClient1.Sendln все должно работать
  • Slym © (15.02.08 06:11) [6]
    Slym ©   (15.02.08 6:10) [5]
    TcpClient1.Sendln

    ClientSocket.Sendln
  • Сергей М. © (15.02.08 09:23) [7]

    > Display.Lines.Add(


    Я не перестаю удивляться, как тебе нравится раз за разом получать одними и теми же граблями по одному и тому же лбу).. Мазохист ?)

    Ты уже раза 3-4 приводил фрагменты своих обработчиков OnAccept, всякий раз тебе было сказано о недопустимости обращений к визуальным VCL-контролам в обработчике этого события, но ты по-прежнему делаешь одну и ту же упомянутую грубую ошибку)
  • Andrewtitoff © (15.02.08 10:13) [8]
    2 Сергей М.
    Ну вроде работает...
    А как выводить информацию тогда, мне же так никто и не сказал..., кстати за основу этой проги взят пример из седьмой дельфи (Chat)...
  • Сергей М. © (15.02.08 10:21) [9]

    > Ну вроде работает


    Рано или поздно настанет "судный день" - в этот день ты обязательно получишь исключением (например, "canvas doesn't allow drawing") по лбу)


    > как выводить информацию


    Зачем ее выводить ? Для протокола что ли ?


    > за основу этой проги взят пример из седьмой дельфи (Chat)


    Там совсем другие компоненты использованы.
  • Andrewtitoff © (15.02.08 10:28) [10]
    2 Сергей М.

    >Зачем ее выводить ? Для протокола что ли ?

    Ну это типа терминала, там мне нужно отправлять туда и обратно файло, как я без вывода информации то это делать буду, тем более я же привел одну из процедур (DIR), как я еще без вывода узнаю о содержимом удаленного винта?...
  • Сергей М. © (15.02.08 10:43) [11]

    > Andrewtitoff ©   (15.02.08 10:28) [10]


    Понятно.

    Но в любом случае вывод инф-ции в визуальный VCL-контрол следует выполнять в основном потоке приложения.
  • Andrewtitoff © (15.02.08 11:10) [12]
    Ясно, тут кстати вылезла еще одна проблемка, когда я пытаюсь переслать файл как я понял с системными атрибутами (с:\autorun.exe) то выскакивает ошибка Socket Error 10061, она кстати выскакивает периодически в процедуре DIR на удаленном конце при просмотре корня...
  • Andrewtitoff © (15.02.08 11:25) [13]
    Может это все брандмауэр виндовсовский?...
  • Сергей М. © (15.02.08 14:21) [14]
    Между файловыми атрибутами и упомянутой ошибкой нет никакой связи.
  • Andrewtitoff © (15.02.08 14:27) [15]
    а в чем тогда может быть дело?
  • Andrewtitoff © (15.02.08 14:29) [16]
    Небольшой вопросик не по теме:

    Чем может быть вызвана ошибка "Cannot remove shell notification icon"?
  • Сергей М. © (15.02.08 14:37) [17]
    10061 = WSAECONNREFUSED = The attempt to connect was forcefully rejected = Запрос на соединение (попытка коннекта к заданному порту) отвержен сервером (т.е. указанный клиентом порт сервера на момент попытки коннекта не активен)
  • Сергей М. © (15.02.08 14:39) [18]

    > Andrewtitoff ©   (15.02.08 14:29) [16]


    Ошибка, вероятно, возникает при вызове Shell_NotifyIcon() ?
  • Andrewtitoff © (15.02.08 15:21) [19]
    Чегото я недопонимаю, а почему он неактивен, текст то он принимает....

    Возникает на выходе из программы, там в oncloce только TrayIcon1.Visible:=false; стоит...
 
Конференция "Сети" » Почему сообщения отсылаются не попорядку?... =((( [D7, WinXP]
Есть новые Нет новых   [134431   +14][b:0][p:0.002]