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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2011, 20:15   #11
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
при посылки файла клиент-клиент, все действия должны проходить через сервер
Сам-то понял что глупость сморозил ?
Операция "клиент-клиент" по определению подразумевает неучастие сервера в этой операции)
mss вне форума Ответить с цитированием
Старый 03.06.2011, 20:32   #12
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

mss
ну по твоей логике если седовать то когда клиент отправляет клиенту личное сообщение, то сервер тоже должен не участвовать, но увы не так!
Если ты внимательно читал то должел был понять суть всего происходяшего, если нет, то поясню, клиент отправляет файл клиенту, но вместе ж с файлом должно прекреплятся индекс или ник другого клиента, файл шлеться сначала на сервер, где Сервер играет свою роль как КПП (контрольно пропускной пунк) он принял файл, и смотрит сначала ему этот файл предназначен или нет, если нет то он осуществляет поиск того пользователя и отправляет ему дальше, действия происходят так же как и с личными сообщениями )))
darek13 вне форума Ответить с цитированием
Старый 03.06.2011, 20:36   #13
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
где Сервер играет свою роль как КПП (контрольно пропускной пунк)
Ой, как я вам не советую. Лучше на прямую. Вдруг эти два клиента в домашней сети, а сервер нет? И нагрузка на сервер Огромная.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 03.06.2011, 20:44   #14
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

_PROGRAMM_
диплом у меня в 20 числах июня но предзащита уже 10, из-за того что мне сказал руководитель переделать чат, создать окна для личный сообщений и убрать таймер, реализовать на сервере все через OnClientRead то потратил приличное время на все это, и теперь все самое основное не успеваю

Цитата:
Ой, как я вам не советую. Лучше на прямую. Вдруг эти два клиента в домашней сети, а сервер нет? И нагрузка на сервер Огромная.
я тоже сначала подумывал добавить на клиенты по серверу, но мешают 2 проблемы
что я непонимаю всего этого прикола как реализовать, и вторая у меня просто весь этот проект привязан в БД и есть шифрование данных, и когда клиент передает файл или сообщение, то он его шифрует своим парольем хэш, а все эти пароли хранятся в БД и когда севрер получает от клиенто данные он считывает этот хэш с базы данных , затем разшифровывает, беред хэш клиенту которому надо послать, шифрует и посылает, а клиент уже разшифровывает своим хешем всю информацию
darek13 вне форума Ответить с цитированием
Старый 03.06.2011, 20:54   #15
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
что я непонимаю всего этого прикола как реализовать, и вторая у меня просто весь этот проект привязан в БД и есть шифрование данных, и когда клиент передает файл или сообщение, то он его шифрует своим парольем хэш, а все эти пароли хранятся в БД и когда севрер получает от клиенто данные он считывает этот хэш с базы данных , затем разшифровывает, беред хэш клиенту которому надо послать, шифрует и посылает, а клиент уже разшифровывает своим хешем всю информацию
Вы знаете, как это на скорости отразится?

(как я понял)
Вы отправляете серверу по 8кбайт + шифровка + база (кстати, база - основной тормоз). Потом сервер передает точно так же клиенту. Получается в 2 раза дольше? Или вы 8кбайт отправляете серверу, сервер клиенту, и так потихоньку? Это же потеря времени. В вашем случае (т.к. времени мало) нужно делать еще один поток серверу и клиенту для отправки файла.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 03.06.2011, 21:11   #16
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

у меня пока клиент просто напрямую отсылает файл серверу и все, работа идет в одннаправленном режиме, но мне нужно что бы работало как и личных сообщениях. Т.е. при приеме сообщение в текст сообщения входит

ClientSocket.Socket.SendText('0'+Fo ntName+FontSize+FontColor+'['+TimeToStr(Time)+'] '+Nik+': '+TextEdit.Text);

Итак: '0'+FontName+FontSize+FontColor+'['+TimeToStr(Time)+'] '+NikEdit.Text+': '+TextEdit.Text или {ключ}+{шрифт}+{дата}+{ник}+{текст} . Ключ "0" - сообщение общего формата, "3" - приват. но в команде 1 посмотри исходники Сервера в обратчике OnClientRead, из сообщения сохраняется ник от кого пришло, и тогда от этого ника, ник это есть логин который хранится в БД, когда выбрали ник отсылается запрос с сервера на базу данных и по этому нику смотрится пароль, но пароль хранится не в открытом виде а в хэш, он с базы берет этот пароль, подставляет и разшифровывает сообщение, потом он ищет кому это сообщение послано, если Серверу, то он сразу же его отображает себе в поле сообщений, если нет, он осуществлляет поиск по масиву пользователей, и когда он находит того кого надо, он отправляет на БД его логин, ищет по нему пароль, берет его, и шафрует сообщение и отсылает дальше, в конечную точку назначения, а там у кажлого клиента при подключение к серверу сохраняется его пароль в переменной, который играет роль ключа
darek13 вне форума Ответить с цитированием
Старый 03.06.2011, 21:17   #17
darek13
Пользователь
 
Аватар для darek13
 
Регистрация: 27.04.2011
Сообщений: 68
По умолчанию

Но я думаю пересылку файлов не так организовать как сообщения. Я хочу что бы на клиенту стоял алгорим шифрования и дешифрования, где он сам вводит ключ, потом любой файл преобразовывается в непонятный для людей файл, типа тупо ярклык, и передается по сети, а ключ можно передать по чату в личных сообщениях, и на другой клиент уже сам вставит ключ и преобразует в нормальный вид файл, но сообщения у меня работаю как я описал выше
darek13 вне форума Ответить с цитированием
Старый 04.06.2011, 21:37   #18
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

darek13, я же оставил сообщение в разделе "Обсуждение статей" -> "Создание многопользовательского чата".
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 04.06.2011, 22:39   #19
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от darek13 Посмотреть сообщение
диплом у меня в 20 числах июня но предзащита уже 10, из-за того что мне сказал руководитель переделать чат, создать окна для личный сообщений и убрать таймер, реализовать на сервере все через OnClientRead то потратил приличное время на все это, и теперь все самое основное не успеваю
Ну, ты герой ...кто же берется за написание программы не проведя анализа предметной области как положено. Сперва нужно было изучить протокол TCP/IP, по его уровням, узнать, что такое сокеты, как они работают. Применительно к чату, ...нужно изучить структуру обмена данными в социальных сетях на основе платформы "Клиент-Сервер". Нужно иметь в виду, что есть такой предмет "Защита информации", который дает понятия не только о методах шифрования данных, но еще и о способах защиты сетей от хакерских атак. Ты же должен писать пояснительную, там все это должно быть описано, как подтверждение того, что ты совершенно осознанно создаешь программу. Нужно иметь в виду, что в мире полно аналогичных программ, нужно привести примеры, изучить каждую из них, и указать, чем твоя программа лучше всех рассмотренных, и для чего и для кого она будет полезной. Вот это называется дипломом.

Если ты берешь за основу мой исходник, то нужно иметь в виду, что я защиты на пакетирование не делал, поскольку это всего лишь демонстрация возможностей. Каждый будет обвешивать примитивный скелет так, как ему нужно. НО! в отличие от твоего преподавателя, я учел момент одной разновидности хакерской атаки - DDoS-атаки. Эта зараза засыпает сервер ложными или корректными запросами с такой скоростью, что сервер не справляется и в конце концов происходит его падение. Именно это произойдет с сервером, если вся часть чата будет находиться в событии сервера OnClientRead. Защиты там нет никакой. Я же выполнил простейший вариант защиты, поместив обработчик в таймер, который просто не позволяет выполнять основной код обработки чаще чем позволяет таймер. Разумеется, для передачи файлов это решение не приемлемое, но задачи такой и не стояло.

Теперь же, событие OnClientRead придется использовать, но, нужна система отслеживания DDoS-атаки, в виде дополнительного счетчика таймаута между запросами клиента. Если клиент прислал запрос на сервер, ...любой запрос или сообщение, то счетчик на стороне сервера запускается для этого клиента. Идет отсчет времени до следующего запроса или сообщения. Если таймаут положенный не истек а запрос пришел, то это нужно посчитать, указав в запись нарушение (тоже счетчик). Если подряд насчитается нарушений больше конкретного числа, например, более 10-ти нарушений за 500 мс, то это расценивается как атака, нужно записать IP-адрес клиента, отправить в бан-лист, и закрыть канал. При повторном подключении, сервер проверит бан-лист и снова "выпнет" злоумышленника.

Только в случае организации системы распознавания атак можно размещать основной код в событии OnClientRead. Само событие создается на конкретный канал и не мешает остальным, сколько запросов, столько и будет создано событий, ...это многопоточность. Событие вернет сокет, который его вызвал Socket: TCustomWinSocket, достаточно будет ответить конкретному пользователю через это возвращение Socket.SendText(), ...все, сообщение сервера пошло автоматически в канал этому клиенту.

Организовать передачу "Клиент-Клиент" напрямую невозможно, поскольку подключение к серверу клиента (если он будет отдельный для приема/передачи файлов), если IP-адрес не является белым - невозможно с данными компонентами TServerSocket и TClientSocket. Сервер должен быть на белом IP, обмен может идти через сервер. Нужно понимать, что размер пакетов, на который разбивается отправляемый файл напрямую зависит от пропускной способности сети и выполняется без нашего участия.

Очень сильно ты затянул с дипломом, нужно много чего знать, а написать диплом за кого-то стоит денег, тем более, если стоят жесткие сроки.

Сочувствую.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 05.06.2011, 19:36   #20
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
нужно записать IP-адрес клиента, отправить в бан-лист,
Сейчас в большинстве случаем ip динамический. Но с вашим высказыванием я согласен.
Цитата:
Организовать передачу "Клиент-Клиент" напрямую невозможно, поскольку подключение к серверу клиента (если он будет отдельный для приема/передачи файлов), если IP-адрес не является белым - невозможно с данными компонентами TServerSocket и TClientSocket.
+ нужно измерять скорость несколько раз(вдруг она не стабильная)
Вообщем, darek13, работы у вас много. Извините за неправильный ответ(клиент-клиент). Хотя, я думаю, проверку домашней сети не помешало бы включить в проект.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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