Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Idtcpserver1, если 2 подключения одновременно
slavon-x86
Вставить ник
сообщение 22:04:2008, 13:50
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 18:12:2005
Пользователь №: 2 707



Репутация: - 0 +


IdTCPServer1
Как можно получить и отравить данные, если 2 подключения одновременно.
Т.е. по сути как работать с каждым подключением по отдельности ?
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 23)
slavon-x86
Вставить ник
сообщение 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
slavon-x86
Вставить ник
сообщение 23:04:2008, 10:32
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 18:12:2005
Пользователь №: 2 707



Репутация: - 0 +


Ничего я не понял ! mad.gif
То что я написал выше работает так криво, что у меня мозги через нос вытекают !

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

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

Подняться вверх 
 
Сообщение #3
sax_ol
Вставить ник
сообщение 23:04:2008, 10:48
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Вы нормально поясните чего вам надо. Есть мнение, что ответов нет, потому как никто не понимает.
Подняться вверх 
 
Сообщение #4
slavon-x86
Вставить ник
сообщение 23:04:2008, 10:53
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 18:12:2005
Пользователь №: 2 707



Репутация: - 0 +


Мне надо создать HTTP сервер с помощью компонента idTCPserver
Но проблема в следеющем:
Браузер делает одновременно 2 запроса к серверу. Как мне по отдельности обработать (получить и отправить данные) каждый запрос.
Подняться вверх 
 
Сообщение #5
sax_ol
Вставить ник
сообщение 23:04:2008, 12:14
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Цитата(slavon-x86 @ 23:04:2008 - 12:53) *
Мне надо создать HTTP сервер с помощью компонента idTCPserver
А почему не TIdHTTPServer?
Подняться вверх 
 
Сообщение #6
slavon-x86
Вставить ник
сообщение 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
sax_ol
Вставить ник
сообщение 23:04:2008, 14:26
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Что то я никак не пойму, сервер сам это делает, вы просто обрабатываете свои эвенты. Или в чем загвоздка? У вас что то не получается или как? покажите что ..

Собственно, можно глянуть на код TIdHTTPServer (TIdCustomHTTPServer) для понимания как там это все.
Подняться вверх 
 
Сообщение #8
slavon-x86
Вставить ник
сообщение 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
sax_ol
Вставить ник
сообщение 23:04:2008, 15:42
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Где этот код находится?
Подняться вверх 
 
Сообщение #10
slavon-x86
Вставить ник
сообщение 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
sax_ol
Вставить ник
сообщение 23:04:2008, 16:11
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


У вас же есть это:
Цитата(slavon-x86 @ 23:04:2008 - 18:05) *
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
зачем еще какието пляски с листами?


кстати а какая версия инди?
Подняться вверх 
 
Сообщение #12
slavon-x86
Вставить ник
сообщение 23:04:2008, 17:04
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 18:12:2005
Пользователь №: 2 707



Репутация: - 0 +


Хм, я туплю ! Причём уже 15 часов подряд huh.gif !

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

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



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

Сообщение отредактировал slavon-x86 - 23:04:2008, 17:05
Подняться вверх 
 
Сообщение #13
sax_ol
Вставить ник
сообщение 23:04:2008, 17:35
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Цитата(slavon-x86 @ 23:04:2008 - 19:04) *
Как прочитать все данные ?
Я же говорю, посмотрите как реализован механизм у TIdHTTPServer.
Цитата(slavon-x86 @ 23:04:2008 - 19:04) *
И вопрос н засыпку, как узнать MAC-адресс клиента ?
Никак. А зачем он вам?
Подняться вверх 
 
Сообщение #14
slavon-x86
Вставить ник
сообщение 23:04:2008, 18:20
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 18:12:2005
Пользователь №: 2 707



Репутация: - 0 +


Цитата
Я же говорю, посмотрите как реализован механизм у TIdHTTPServer.

Если бы я смог в этом разобраться...


Цитата
И вопрос н засыпку, как узнать MAC-адресс клиента ?
Никак. А зачем он вам?

Узнать можно ! Вопрос как !?
Для защиты от подмены IP
Подняться вверх 
 
Сообщение #15
sax_ol
Вставить ник
сообщение 24:04:2008, 05:58
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Цитата(sax_ol @ 23:04:2008 - 19:35) *
Если бы я смог в этом разобраться...
А что там не понятно? спрашивайте, чем можем поможем.
Цитата(slavon-x86 @ 23:04:2008 - 20:20) *
Узнать можно ! Вопрос как !?
Ну известно как, найти этого клиента, припереть его к стенке, дать ему по самое неболуй, и он сам все расскажет.
Если найдете другой метод. пишите тут его.



Цитата(slavon-x86 @ 23:04:2008 - 20:20) *
Для защиты от подмены IP
Странная трактовка, а как вы себе это представляете? Вот клиент пришел к вам через анонимный прокси, это как?
Подняться вверх 
 
Сообщение #16
slavon-x86
Вставить ник
сообщение 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
sax_ol
Вставить ник
сообщение 24:04:2008, 10:06
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Цитата(slavon-x86 @ 24:04:2008 - 11:43) *
Отправлю запрос на обратный IP-адресс, если попросит логинизироватся, то это частный прокси сервер, причём даже если он мега анонимный, у него всё равно открыт один из Default портов ! А если не анонимный, то просто выполнит мой запрос !
Не понял это как? Что значит пошлете запрос на ИП? Какой запрос?


Цитата(slavon-x86 @ 24:04:2008 - 11:43) *
Снифер его видит, а зничит он есть !
Покажите как он его видит.
Подняться вверх 
 
Сообщение #18
slavon-x86
Вставить ник
сообщение 24:04:2008, 12:46
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 18:12:2005
Пользователь №: 2 707



Репутация: - 0 +


Вот маки
Прикрепленные файлы
Прикрепленный файл  123.JPG ( 64.5 килобайт ) Кол-во скачиваний: 6
 
Подняться вверх 
 
Сообщение #19
sax_ol
Вставить ник
сообщение 24:04:2008, 13:01
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Цитата(slavon-x86 @ 24:04:2008 - 14:46) *
Вот маки
И что? Вы думали меня ими напугать? smile.gif Не вышло, я про них в курсе.wink.gif Только как же с вопросами из Сообщение #18?
Подняться вверх 
 
Сообщение #20
slavon-x86
Вставить ник
сообщение 24:04:2008, 13:59
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 18:12:2005
Пользователь №: 2 707



Репутация: - 0 +


Пошлю любой GET запрос с указанием в заголовке прокси ! Вобще анонимный прокси я точно не знаю как определить !
Подняться вверх 
 
Сообщение #21
sax_ol
Вставить ник
сообщение 24:04:2008, 14:14
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Цитата(slavon-x86 @ 24:04:2008 - 15:59) *
Пошлю любой GET запрос с указанием в заголовке прокси
И что дальше, он что обязам вам что-то ответить?
Подняться вверх 
 
Сообщение #22
slavon-x86
Вставить ник
сообщение 24:04:2008, 14:51
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 135
Регистрация: 18:12:2005
Пользователь №: 2 707



Репутация: - 0 +


Возможно он поросит авторизоваться ! Если попросит, значит прокси !
Подняться вверх 
 
Сообщение #23
sax_ol
Вставить ник
сообщение 24:04:2008, 15:19
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740