Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2011, 21:41   #21
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

_PROGRAMM_, в основном Интернет IP-адрес конкретной машины маскируется провайдером, а у него IP постоянный, во всяком случае довольно длительное время, так что отшить дятла можно без проблем. Измерять скорость не потребуется, это совершенно не важно, ...есть связь и есть, TCP/IP протокол сам найдет менее загруженный путь и разобьет файл на необходимое число пакетов так, чтобы он быстрее перекачался. Просто нужно перед отправкой самого файла послать информацию о нем: имя файла, размер, кому передать.

darek13, ты бы посмотрел в сторону узкоспециализированных программ для мелких предприятий, чтобы избавить их от переговоров между кабинетами через Интернет, организовать сервер БД документации в электронном виде, чтобы пользователи использовали твой чат как внутренний через ЛВС, передавали файлы документов между собой, давали ссылки на архив на сервере. Можно снабдить программу кнопками быстрых запросов на документы, например Закон РФ, или ГОСТ, в зависимости, что за предприятие. Но, нужно и проходить практику на подобных предприятиях чтобы узнавать их проблемы, и чем ты им конкретно можешь помочь.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 08.06.2011, 23:37   #22
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

_PROGRAMM_ и Beermonza, я с вашими высказываниями полностью согласен. Хорошая новость в том, что время еще немного есть, а так же был проведен анализ перед созданием проекта, программа рассчитывалась, как для небольшой корпоративной сети, пока что она тестируется в сети института, где 4 комп. лаборатории, где есть сервер с айпи 172.16.7 (…), и локальная сеть, у каждой комп. лаборатории своя подсеть, у них айпи 172.16.1 (...), 172.16.3 (...), 172.16.5 (...), 172.16.7 (...), и еще есть возможность подключение через Wi-Fi в двух вариантах, первый тебе дается автоматический айпи адрес и ты подсоединяешься с совсем другой сети у каторой айпи уже 192.168.__.__, где т ыможешь получить доступ к серверу института, а к тебе доступа как к выделенному серверу – доступа нет. А другой способ, это вбить в настройки один из некоторых зарезервированных айпи, и подключится уже к сети института, от которой к тебе доступ тоже будет. Я работаю под зарезервированным айпи, и мой комп. выступает как сервер для клиентовских приложений. На моем компьютере стоит БД, через которую идет проверка подключаемых клиентов. Ниже я включил рисунок с локальной сетью института, если интересно.
Цитата:
Теперь же, событие OnClientRead придется использовать, но, нужна система отслеживания DDoS-атаки, в виде дополнительного счетчика таймаута между запросами клиента. Если клиент прислал запрос на сервер, ...любой запрос или сообщение, то счетчик на стороне сервера запускается для этого клиента. Идет отсчет времени до следующего запроса или сообщения. Если таймаут положенный не истек а запрос пришел, то это нужно посчитать, указав в запись нарушение (тоже счетчик). Если подряд насчитается нарушений больше конкретного числа, например, более 10-ти нарушений за 500 мс, то это расценивается как атака, нужно записать IP-адрес клиента, отправить в бан-лист, и закрыть канал. При повторном подключении, сервер проверит бан-лист и снова "выпнет" злоумышленника.
Это очень интересно, я сам не знаю, почему я про это не подумал даже, только вот как это можно реализовать, можно подкинуть идей, если не трудно. А по поводу передачи, а если сделать для передачи файлов отдельный СерверСокет, что бы уменьшить нагрузку на канал сообщений.
Beermonza, у меня к тебе есть парочку вопросов:
1) когда подключается клиент к серверу, то я прописал так что бы в окне чата вместе с ником подключаемого, отображалось его хост и айпи
Код:
procedure TForm2.SS2ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
………………………
  begin
……………………………………………..
………………………………………………….
              Case com of                       
                0: Begin
…………………………………………..
……………………………………
                   end;
                1: Begin
// запишем в массив полученный ник
                     TUserList(Socket.Data).Name:=Copy(txt,2,len);
                     ChatRichEdit.Lines.Add('Пользователь: ' + TUserList(Socket.Data).Name + '. Host: ' + Socket.RemoteHost + '. IP: ' +Socket.RemoteAddress);
                     TUserList(Socket.Data).Image:=0;
                     UpdateUserList;
               end;
// -----------------------------------------------------------------------------
И все отлично работает, но я хочу сделать такой прикол, что когда в списке пользователей выбираешь ник, и клацаешь на него правдой кнопкой, то над эти ником появляется меню из двух кнопок «просмотреть информацию о клиенте» и вторая «Отослать файл».
Вот как мне сделать так что бы при выделение пользователя и выбора «просмотреть инфу о клиенте» И В ChatRichEdit вывелось сообщение с его данными .
На вкладке Events компонента ListView (UserListView), в процедуре OnContextPopup, написал процедуру выскакивающего меню :
Код:
procedure TForm2.UserListViewContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
  var
    li:TListItem;
  begin
    li:=UserListView.GetItemAt(MousePos.X,MousePos.Y);
    if li=nil then
      begin
        Handled:=true;
      end;
  end;
Изображения
Тип файла: jpg Сеть института.jpg (68.3 Кб, 195 просмотров)
darek13 вне форума Ответить с цитированием
Старый 08.06.2011, 23:37   #23
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

2) я реализовываю вкладки для личных сообщений, на сервере они создаются отлично по приходу личных сообщений от клиентов и имя вкладок присваивает от логина клиентов, но как сделать так что бы по приходу личного сообщения для Сервера, что бы сначала когда получил ник от кого сообщение, програнало по циклу с вкладками, что бы вычеслить если ли уже такая вкладка с таким именем, и если есть, что бы открыло ее и туда уже вывело сообщение . Вот код создание вкладки по приходу ЛС.
Код:
procedure TForm2.SS2ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
………………………
  begin
……………………………………………..
………………………………………………….
              Case com of                       
                0: Begin
…………………………………………..
……………………………………
                   end;
                1: Begin
…………………………………………………..
            end;
                3: Begin
………………………………………..
// Если приватный пользователь Сервер 
                     If PrivateUser=Niks then
                begin
    TabSheet := TTabSheet.Create(Self);
    TabSheet.Caption := TUserList(Socket.Data).Name;
    TabSheet.PageControl := PageControl1;
    RichEdit := TRichEdit.Create(Self);
    RichEdit.Parent := TabSheet;
    RichEdit.Align := alClient;
    ToolBar := TToolBar.Create(Self);
    ToolBar.Parent := TabSheet;
    ToolBar.Align := alTop;
    TabSheet.ImageIndex:=0;
   RichEdit.Text :=(''+Copy(txt,7+Length(PrivateUser),len-Length(PrivateUser)-1));
        end
          else
//если личное сообщение не Серверу, начинаем поиск клиента
             Begin
………………………………..
Тут возник еще один вопрос, раньше сообщение выводилось
ShowColorMassage(Copy(txt,1,5)+Copy(txt,7+Length(PrivateUser),len-Length(PrivateUser)-1), 1);
А теперь :
RichEdit.Text :=(''+Copy(txt,7+Length(PrivateUser ),len-Length(PrivateUser)-1));
Тут я откинул Copy(txt,1,5)+ и в конце сообщения «,1);» вот что означала эта 1 а то не особо понятно, но проблем без нее нет.
darek13 вне форума Ответить с цитированием
Старый 10.06.2011, 05:27   #24
somnium
 
Регистрация: 10.06.2011
Сообщений: 5
По умолчанию

Парни а как допустим сохранять имя юзера чтобы каждый раз не забивать?
somnium вне форума Ответить с цитированием
Старый 10.06.2011, 07:25   #25
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

ты вообще про что. какого именно юзера?
darek13 вне форума Ответить с цитированием
Старый 11.06.2011, 23:51   #26
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

darek13, если ты будешь в разных местах освещать модернизацию чата по статье, то я могу не найти эти сообщения, ...если начал в одном разделе, продолжай там же, а если есть фундаментальные вопросы по сетям, задавай их тут.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 13.06.2011, 09:07   #27
somnium
 
Регистрация: 10.06.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от darek13 Посмотреть сообщение
ты вообще про что. какого именно юзера?
при запуске клиента чтобы все время не забивать ник, чтобы он был заранее сохранен.
somnium вне форума Ответить с цитированием
Старый 13.06.2011, 11:06   #28
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

somnium
если ты имеешь виду свой ник, что бы его не вводить постоянно, то можно это сделать при создание формы например, клацаешь на форму 2 раза и создается процедура procedure TForm1.FormCreate(Sender: TObject);
вот в ней запишешь например: edit1.text:='тут пишешь ник'; и тогда при запуске клиента у тебя будет в поле для ника тот ник который ты ужешь в '......'
darek13 вне форума Ответить с цитированием
Старый 19.06.2011, 08:12   #29
Vigi
Пользователь
 
Аватар для Vigi
 
Регистрация: 25.09.2008
Сообщений: 38
По умолчанию

Цитата:
Сообщение от somnium Посмотреть сообщение
Парни а как допустим сохранять имя юзера чтобы каждый раз не забивать?
используй ini
Я с Вами где-то рядом...
Vigi вне форума Ответить с цитированием
Старый 19.06.2011, 19:21   #30
somnium
 
Регистрация: 10.06.2011
Сообщений: 5
По умолчанию

Можно подробнее написать как это сделать?
somnium вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передачи по сети файла Alar Работа с сетью в Delphi 4 07.02.2011 23:21
Ошибка конвертации при передачи фото по сети Lokos Работа с сетью в Delphi 2 07.10.2010 02:08
Локальные сети, алгоритм передачи данных Guliayka Помощь студентам 1 25.12.2009 16:26
помогомите написать програмку для передачи сообщений в локальной сети Илюха Работа с сетью в Delphi 6 20.11.2007 00:57