Idtcpserver1

slavon-x86

Well-Known Member
18.12.2005
215
0
#1
IdTCPServer1
Как можно получить и отравить данные, если 2 подключения одновременно.
Т.е. по сути как работать с каждым подключением по отдельности ?
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#2
Разобрался ! Вот пример, может кому ещё понадобиться !

Код:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
List: TList;

begin
try
List := IdTCPServer1.Contexts.LockList;
Memo1.Lines.Add(IntToStr(List.Count));
IdTCPServer1.Contexts.UnlockList;
except
end;

TIdContext(List.Items[0]).Connection.Socket.WriteLn(s);
TIdContext(List.Items[0]).Connection.Disconnect;
end;
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#3
Ничего я не понял ! :angry:
То что я написал выше работает так криво, что у меня мозги через нос вытекают !

К примеру: есть 3 активных подключения, первый отключается, то все остальные сдвигаються и меняются индексы ! Я хочу передать сообщение 1 подключению, но пока в OnDisconnect я обрабатываю сдвиг индексов - сообщение передаётся 2 клиенту !

Как сделать чтобы было нормально ?
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#4
Мне надо создать HTTP сервер с помощью компонента idTCPserver
Но проблема в следеющем:
Браузер делает одновременно 2 запроса к серверу. Как мне по отдельности обработать (получить и отправить данные) каждый запрос.
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#5
А почему не TIdHTTPServer?
Это уже готовый HTTP сервер, который не совсем удовлетворяет нужным мне параметрам. Его конечно можно переделать, но idTCPserver для моего случая лучше подходит.
На каком-то сайте (не помню на каком) была написана статья взлома TIdHTTPServer. Через какую-то команду можно получить доступ к любой папке !

Но всё таки я реально не могу понять как решить проблему
Код:
Браузер делает одновременно 2 запроса к серверу. Как мне по отдельности обработать (получить и отправить данные) каждый запрос.
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#6
Постановка задачи

Есть компонент idTCPserver. localhost:80

Клиент (браузер, к примеру Opera) отсылает одновременно 3 запроса на (localhost:80) - 1: GET index.php, 2: GET favicon.php, 3: GET signup.php

Надо отосдать: "Текст1" на запрос (1)
Надо отосдать: "Текст2" на запрос (2)
Надо отосдать: "Текст3" на запрос (3)

Как мне отослать ответы на каждый запрос ?


Пример

Код:
var
List: TList;
s: String;
i: Integer;

Begin

List := IdTCPServer1.Contexts.LockList;
IdTCPServer1.Contexts.UnlockList;

// Действие 1 - Количество активных подключений
i := List.Count;

...

// Действие 2 - Отправка данных
TIdContext(List.Items[i-1]).Connection.Socket.WriteLn(s);

end;
Я получаю количество активных подключений (Действие 1). К примеру i = 3
Затем отключается 1-й пользователь, и i становиться = 2
Происходит событие OnDisconnect, но пока данные там обрабатываются запускается отправка данных (Действие 2) пользователю i = 3, но его уже не существует, т.к. первый отключился, а остальные сдвинулись.
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#8
Хм, я туплю ! Причём уже 15 часов подряд :) !

Оно просто запускает событие TForm1.IdTCPServer1Execute(AContext: TIdContext) повторно если не все данные прочитаны. Как прочитать все данные ?

Я делаю вот так, но чувствую что это неправильно, т.к. строка может быть пустой...
Код:
repeat
s1 := AContext.Connection.Socket.ReadLn;
s2 := s2 + s1;
until s1 = '';

И вопрос н засыпку, как узнать MAC-адресс клиента ?
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#9
Я же говорю, посмотрите как реализован механизм у TIdHTTPServer.
Если бы я смог в этом разобраться...


И вопрос н засыпку, как узнать MAC-адресс клиента ?
Никак. А зачем он вам?
Узнать можно ! Вопрос как !?
Для защиты от подмены IP
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#10
Узнать можно ! Вопрос как !?
Ну известно как, найти этого клиента, припереть его к стенке, дать ему по самое неболуй, и он сам все расскажет.
Если найдете другой метод. пишите тут его.
Ну вобщето мак адресс обеспечивает связь через IP протокол
МАК адрес это физический адрес контроллера, и на нём вся маршрутизация основана. Снифер его видит, а зничит он есть ! Его надо только извлечь как-то !



Код:
[code]Для защиты от подмены IP
Странная трактовка, а как вы себе это представляете? Вот клиент пришел к вам через анонимный прокси, это как[/code]
Отправлю запрос на обратный IP-адресс, если попросит логинизироватся, то это частный прокси сервер, причём даже если он мега анонимный, у него всё равно открыт один из Default портов ! А если не анонимный, то просто выполнит мой запрос !
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#12
Пошлю любой GET запрос с указанием в заголовке прокси ! Вобще анонимный прокси я точно не знаю как определить !
 

slavon-x86

Well-Known Member
18.12.2005
215
0
#13
Возможно он поросит авторизоваться ! Если попросит, значит прокси !