Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
22:04:2008, 13:50
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
IdTCPServer1
Как можно получить и отравить данные, если 2 подключения одновременно. Т.е. по сути как работать с каждым подключением по отдельности ? |
|
Сообщение
#1
|
|
![]() |
|
|
22:04:2008, 20:39
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Разобрался ! Вот пример, может кому ещё понадобиться !
Код 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; |
|
Сообщение
#2
|
|
|
|
23:04:2008, 10:32
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Ничего я не понял !
То что я написал выше работает так криво, что у меня мозги через нос вытекают ! К примеру: есть 3 активных подключения, первый отключается, то все остальные сдвигаються и меняются индексы ! Я хочу передать сообщение 1 подключению, но пока в OnDisconnect я обрабатываю сдвиг индексов - сообщение передаётся 2 клиенту ! Как сделать чтобы было нормально ? |
|
Сообщение
#3
|
|
|
|
23:04:2008, 10:48
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Вы нормально поясните чего вам надо. Есть мнение, что ответов нет, потому как никто не понимает.
|
|
Сообщение
#4
|
|
|
|
23:04:2008, 10:53
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Мне надо создать HTTP сервер с помощью компонента idTCPserver
Но проблема в следеющем: Браузер делает одновременно 2 запроса к серверу. Как мне по отдельности обработать (получить и отправить данные) каждый запрос. |
|
Сообщение
#5
|
|
|
|
23:04:2008, 12:14
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
|
|
Сообщение
#6
|
|
|
|
23:04:2008, 13:18
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Цитата А почему не TIdHTTPServer? Это уже готовый HTTP сервер, который не совсем удовлетворяет нужным мне параметрам. Его конечно можно переделать, но idTCPserver для моего случая лучше подходит. На каком-то сайте (не помню на каком) была написана статья взлома TIdHTTPServer. Через какую-то команду можно получить доступ к любой папке ! Но всё таки я реально не могу понять как решить проблему Код Браузер делает одновременно 2 запроса к серверу. Как мне по отдельности обработать (получить и отправить данные) каждый запрос.
Сообщение отредактировал slavon-x86 - 23:04:2008, 13:19 |
|
Сообщение
#7
|
|
|
|
23:04:2008, 14:26
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Что то я никак не пойму, сервер сам это делает, вы просто обрабатываете свои эвенты. Или в чем загвоздка? У вас что то не получается или как? покажите что ..
Собственно, можно глянуть на код TIdHTTPServer (TIdCustomHTTPServer) для понимания как там это все. |
|
Сообщение
#8
|
|
|
|
23:04:2008, 14:52
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Постановка задачи
Есть компонент 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 - 23:04:2008, 15:16 |
|
Сообщение
#9
|
|
|
|
23:04:2008, 15:42
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Где этот код находится?
|
|
Сообщение
#10
|
|
|
|
23:04:2008, 16:05
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Код procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin ... end Сообщение отредактировал slavon-x86 - 23:04:2008, 16:06 |
|
Сообщение
#11
|
|
|
|
23:04:2008, 16:11
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
|
|
Сообщение
#12
|
|
|
|
23:04:2008, 17:04
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Хм, я туплю ! Причём уже 15 часов подряд
Оно просто запускает событие TForm1.IdTCPServer1Execute(AContext: TIdContext) повторно если не все данные прочитаны. Как прочитать все данные ? Я делаю вот так, но чувствую что это неправильно, т.к. строка может быть пустой... Код repeat s1 := AContext.Connection.Socket.ReadLn; s2 := s2 + s1; until s1 = ''; И вопрос н засыпку, как узнать MAC-адресс клиента ? Сообщение отредактировал slavon-x86 - 23:04:2008, 17:05 |
|
Сообщение
#13
|
|
|
|
23:04:2008, 17:35
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
|
|
Сообщение
#14
|
|
|
|
23:04:2008, 18:20
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Цитата Я же говорю, посмотрите как реализован механизм у TIdHTTPServer. Если бы я смог в этом разобраться... Цитата И вопрос н засыпку, как узнать MAC-адресс клиента ? Никак. А зачем он вам? Узнать можно ! Вопрос как !? Для защиты от подмены IP |
|
Сообщение
#15
|
|
|
|
24:04:2008, 05:58
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Если бы я смог в этом разобраться... А что там не понятно? спрашивайте, чем можем поможем.Узнать можно ! Вопрос как !? Ну известно как, найти этого клиента, припереть его к стенке, дать ему по самое неболуй, и он сам все расскажет.Если найдете другой метод. пишите тут его. Для защиты от подмены IP Странная трактовка, а как вы себе это представляете? Вот клиент пришел к вам через анонимный прокси, это как?
|
|
Сообщение
#16
|
|
|
|
24:04:2008, 09:43
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Цитата Цитата Узнать можно ! Вопрос как !? Ну известно как, найти этого клиента, припереть его к стенке, дать ему по самое неболуй, и он сам все расскажет. Если найдете другой метод. пишите тут его. Ну вобщето мак адресс обеспечивает связь через IP протокол МАК адрес это физический адрес контроллера, и на нём вся маршрутизация основана. Снифер его видит, а зничит он есть ! Его надо только извлечь как-то ! Код [code]Для защиты от подмены IP Странная трактовка, а как вы себе это представляете? Вот клиент пришел к вам через анонимный прокси, это как[/code] Отправлю запрос на обратный IP-адресс, если попросит логинизироватся, то это частный прокси сервер, причём даже если он мега анонимный, у него всё равно открыт один из Default портов ! А если не анонимный, то просто выполнит мой запрос ! Сообщение отредактировал slavon-x86 - 24:04:2008, 09:44 |
|
Сообщение
#17
|
|
|
|
24:04:2008, 10:06
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Отправлю запрос на обратный IP-адресс, если попросит логинизироватся, то это частный прокси сервер, причём даже если он мега анонимный, у него всё равно открыт один из Default портов ! А если не анонимный, то просто выполнит мой запрос ! Не понял это как? Что значит пошлете запрос на ИП? Какой запрос?Снифер его видит, а зничит он есть ! Покажите как он его видит. |
|
Сообщение
#18
|
|
|
|
24:04:2008, 12:46
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
|
|
Сообщение
#19
|
|
|
|
24:04:2008, 13:01
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
|
|
Сообщение
#20
|
|
|
|
24:04:2008, 13:59
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Пошлю любой GET запрос с указанием в заголовке прокси ! Вобще анонимный прокси я точно не знаю как определить !
|
|
Сообщение
#21
|
|
|
|
24:04:2008, 14:14
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
|
|
Сообщение
#22
|
|
|
|
24:04:2008, 14:51
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 135 Регистрация: 18:12:2005 Пользователь №: 2 707 Репутация: 0
|
Возможно он поросит авторизоваться ! Если попросит, значит прокси !
|
|
Сообщение
#23
|
|
|
|
24:04:2008, 15:19
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 |