|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.06.2011, 20:15 | #11 | |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Цитата:
Операция "клиент-клиент" по определению подразумевает неучастие сервера в этой операции) |
|
03.06.2011, 20:32 | #12 |
Пользователь
Регистрация: 27.04.2011
Сообщений: 68
|
mss
ну по твоей логике если седовать то когда клиент отправляет клиенту личное сообщение, то сервер тоже должен не участвовать, но увы не так! Если ты внимательно читал то должел был понять суть всего происходяшего, если нет, то поясню, клиент отправляет файл клиенту, но вместе ж с файлом должно прекреплятся индекс или ник другого клиента, файл шлеться сначала на сервер, где Сервер играет свою роль как КПП (контрольно пропускной пунк) он принял файл, и смотрит сначала ему этот файл предназначен или нет, если нет то он осуществляет поиск того пользователя и отправляет ему дальше, действия происходят так же как и с личными сообщениями ))) |
03.06.2011, 20:36 | #13 | |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Цитата:
|
|
03.06.2011, 20:44 | #14 | |
Пользователь
Регистрация: 27.04.2011
Сообщений: 68
|
_PROGRAMM_
диплом у меня в 20 числах июня но предзащита уже 10, из-за того что мне сказал руководитель переделать чат, создать окна для личный сообщений и убрать таймер, реализовать на сервере все через OnClientRead то потратил приличное время на все это, и теперь все самое основное не успеваю Цитата:
что я непонимаю всего этого прикола как реализовать, и вторая у меня просто весь этот проект привязан в БД и есть шифрование данных, и когда клиент передает файл или сообщение, то он его шифрует своим парольем хэш, а все эти пароли хранятся в БД и когда севрер получает от клиенто данные он считывает этот хэш с базы данных , затем разшифровывает, беред хэш клиенту которому надо послать, шифрует и посылает, а клиент уже разшифровывает своим хешем всю информацию |
|
03.06.2011, 20:54 | #15 | |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Цитата:
(как я понял) Вы отправляете серверу по 8кбайт + шифровка + база (кстати, база - основной тормоз). Потом сервер передает точно так же клиенту. Получается в 2 раза дольше? Или вы 8кбайт отправляете серверу, сервер клиенту, и так потихоньку? Это же потеря времени. В вашем случае (т.к. времени мало) нужно делать еще один поток серверу и клиенту для отправки файла. |
|
03.06.2011, 21:11 | #16 |
Пользователь
Регистрация: 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, из сообщения сохраняется ник от кого пришло, и тогда от этого ника, ник это есть логин который хранится в БД, когда выбрали ник отсылается запрос с сервера на базу данных и по этому нику смотрится пароль, но пароль хранится не в открытом виде а в хэш, он с базы берет этот пароль, подставляет и разшифровывает сообщение, потом он ищет кому это сообщение послано, если Серверу, то он сразу же его отображает себе в поле сообщений, если нет, он осуществлляет поиск по масиву пользователей, и когда он находит того кого надо, он отправляет на БД его логин, ищет по нему пароль, берет его, и шафрует сообщение и отсылает дальше, в конечную точку назначения, а там у кажлого клиента при подключение к серверу сохраняется его пароль в переменной, который играет роль ключа |
03.06.2011, 21:17 | #17 |
Пользователь
Регистрация: 27.04.2011
Сообщений: 68
|
Но я думаю пересылку файлов не так организовать как сообщения. Я хочу что бы на клиенту стоял алгорим шифрования и дешифрования, где он сам вводит ключ, потом любой файл преобразовывается в непонятный для людей файл, типа тупо ярклык, и передается по сети, а ключ можно передать по чату в личных сообщениях, и на другой клиент уже сам вставит ключ и преобразует в нормальный вид файл, но сообщения у меня работаю как я описал выше
|
04.06.2011, 21:37 | #18 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
darek13, я же оставил сообщение в разделе "Обсуждение статей" -> "Создание многопользовательского чата".
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
04.06.2011, 22:39 | #19 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Если ты берешь за основу мой исходник, то нужно иметь в виду, что я защиты на пакетирование не делал, поскольку это всего лишь демонстрация возможностей. Каждый будет обвешивать примитивный скелет так, как ему нужно. НО! в отличие от твоего преподавателя, я учел момент одной разновидности хакерской атаки - 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) Мир духу его
|
|
05.06.2011, 19:36 | #20 | ||
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Цитата:
Цитата:
Вообщем, darek13, работы у вас много. Извините за неправильный ответ(клиент-клиент). Хотя, я думаю, проверку домашней сети не помешало бы включить в проект. |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
передачи по сети файла | 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 |