Конференция "Сети" » Проблемма TIdTCPServer [D7, WinXP]
 
  • Anatoly Podgoretsky © (18.06.10 12:26) [40]
    > PonosetcDM  (18.06.2010 11:48:37)  [37]

    Это же потоки, откуда Memo1.Lines.Add без синхронизации.
  • Сергей М. © (18.06.10 12:44) [41]

    > почиму это коннекшен рвется?


    Потому что как только клиент отправит какую-либо строку, ReadLn тут же вернет управление, и после лажи [40] Execute завершит выполнение, что ведет к разрыву соединения по инициативе сервера
  • PonosetcDM © (18.06.10 12:48) [42]

    > Это же потоки, откуда Memo1.Lines.Add без синхронизации.


    Окей, давай эту строчку ваще уберём.... и все равно
    T = Telnet
    S = Server Project

    запустил Т
    запустил S
    T, o localhost 12312
    S принял подключение
    S отправил "123", T обработал и выдал "123"
    T закрыли, Т открыли
    T, o localhost 12312
    S при посылке грит Connection closed gracefully

    теперь ваще все Гут должно быть, никакой проблеммы с синхронизацией...
    и все тоже самое...
  • Сергей М. © (18.06.10 12:51) [43]

    > PonosetcDM ©   (18.06.10 12:48) [42]



    > запускаю телнет опять,
    > делаю телнетом "o localhost 12312", и даже коннект у сервера
    > не срабатывае


    Зачем же давить BitBtn1, если нет ни одного коннекта ?)
  • PonosetcDM © (18.06.10 13:13) [44]
    Хм.... ТОгда вопрос: А почиму его нет))????? Ведь когда телнет дисконектился, у сервера сработал дисконнект, а потом коннект не срабатывает...
  • Slym © (18.06.10 14:09) [45]
    PonosetcDM ©   (18.06.10 11:48) [37]
    for i:=0 to IdTCPServer1.Contexts.LockList.Count-1 do

    чтож ты делаешь то? нехороший человек
  • Slym © (18.06.10 14:11) [46]
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var i:integer;
    list:TList;
    begin
     list:=IdTCPServer1.Contexts.LockList;
     try
       for i:=0 to list.Count-1 do
       with TIdContext(list.Items[i]).Connection.Socket do
         WriteLn('123');
     finally
       IdTCPServer1.Contexts.UnlockList;
     end;
    end;
  • Slym © (18.06.10 14:13) [47]
    Сергей М. ©   (18.06.10 12:44) [41]
    +1 к [35]
  • PonosetcDM © (18.06.10 14:39) [48]
    Мдааа......... вот так таааааакккк...... Спс большое вроде бы все работает, теперь буду следить за всем, и закреплю в аналах своей памяти все посты сказанные сдесь...

    Только хотелось бы узнать по-подробнее: почиму не работает с for i:=0 to IdTCPServer1.Contexts.LockList.Count-1 do,
    а если IdTCPServer1.Contexts.LockList.Count-1 переопределить, то все работает??

    СПС всем огромное...
  • PonosetcDM © (18.06.10 14:40) [49]
    сдесь = здесь
  • Сергей М. © (18.06.10 20:30) [50]

    > в аналах своей памяти


    Анальная у тебя память, однако))))
  • Slym © (20.06.10 13:05) [51]
    PonosetcDM ©   (18.06.10 14:39) [48]
    количество LockList дожно быть равно колву UnlockList
    тут
    PonosetcDM ©   (18.06.10 11:48) [37]
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var i:integer;
    begin
     try
       for i:=0 to IdTCPServer1.Contexts.LockList.Count-1 do
       with TIdContext(IdTCPServer1.Contexts.LockList.Items[i]).Connection.Socket do
         WriteLn('123');
     finally
       IdTCPServer1.Contexts.UnlockList;
     end;
    end;


    Колво LockList = 1+ListCount
    и это при условии что дельфи за тебя оптимизирует i:=0 to IdTCPServer1.Contexts.LockList.Count-1 за менив постоянное вычисление предела цикла на единичное вычисление

    колво UnlockList = 1
  • Anatoly Podgoretsky © (20.06.10 13:19) [52]
    > Slym  (20.06.2010 13:05:51)  [51]

    А ты можешь документально подтвердить постоянное вычисление предела цикла?
  • Сергей М. © (20.06.10 22:30) [53]

    > Slym ©   (20.06.10 13:05) [51]
    > количество LockList дожно быть равно колву UnlockList


    Это же не семафор)
  • Slym © (21.06.10 06:04) [54]
    Сергей М. ©   (20.06.10 22:30) [53]
    а критической секции это не касается?
    один поток накрутит EnterCriticalSection и пока не скрутит столько же раз Leave - другие будут ждать
    Anatoly Podgoretsky ©   (20.06.10 13:19) [52]
    читать отрывочно умеешь, теперь прочитай еще раз полностью: вникни в формулу (1 (вычисление предела)+ListCount (кол-во итераций)) и дочитай про оптимизацию
  • Коля (03.09.14 21:51) [55]
    ТЫ локлист открыл и заблокировал,разблокируй его и все пойдет
 
Конференция "Сети" » Проблемма TIdTCPServer [D7, WinXP]
Есть новые Нет новых   [118667   +47][b:0][p:0.001]