Здравствуйте. Извиняюсь сразу, за возможно, повторную тему.(искал ответ, но не нашёл)В данный момент занят созданием клиента на основе tcp протокола, в котором реализован текстовый, звуковой чаты, так же доступна передача файлов. Столкнулся с 2 проблемами. 1: для каждого типа данных, пришлось делать отдельный сервер с портом, то есть для текстового чата один сервер с портом, для передачи файлов другой. Читал, что можно передавать разные типы данных с помощью TCP_ServerEx, но толком не понял как именно. 2: Долго парился, но так и не смог сделать показ онлайн клиентов, может кто подскажет, как ? Идея, реализовать что-то похожее на flylinkdc++, но делаю для конкретного трекера. Извиняюсь, что я такой бездарь и у самого пока не получилось,а напрягаю вас))
------------ Дoбавленo в 01.22:
Так же, не понятно как реализовать передачу данных по личке, то есть клиент-клиент, минуя сервер.
Этот топик читают: Гость
Ответов: 4
Рейтинг: 0
|
|||
карма: 1 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 9 раз(а), последний 2021-06-21 04:14:29 |
|||
карма: 0 |
|
Ответов: 4633
Рейтинг: 749
|
|||
Azerate, "минуя сервер" - зачем? Сервер является связующим звеном для клиентов, отвечает за авторизацию пользователей, помогает соединять пользователей, которые не имеют выделенного IP, ведет журнал сообщений и т.п.
"Разные типы" данных отличаются только способом обработки в принимающей схеме. Передаются по сети одинаково. Проблема только в том, что любые данные передаются порциями, которые мы получаем на событии onRead. Поэтому при передачи больших файлов принимающей стороне нужно знать об окончании передачи. Это можно реализовать путем посылки перед самим файлом условной команды, показывающей, что сейчас будет передаваться файл указанной длины. Тогда клиент будет считывать это количество данных в файл, а затем опять переключится в "текстовый режим". Кроме того, временный запуск отдельного сервера на другом порту исключительно для передачи файлов тоже может быть подходящим вариантом. Условием окончания передачи может служить разрыв соединения. Показ онлайн-клиентов - при подключении нового клиента сервер может посылать всем текущим подключениям условную команду "пользователь такой-то появился/исчез из сети". А клиенты у себя обновляют список активных пользователей. |
|||
карма: 26 |
|
Ответов: 4
Рейтинг: 0
|
|||
Netspirit писал(а): сервер может посылать всем текущим подключениям условную команду "пользователь такой-то появился/исчез из сети". А клиенты у себя обновляют список активных пользователей.Netspirit писал(а): реализовать путем посылки перед самим файлом условной команды, показывающей, что сейчас будет передаваться файл указанной длиныНа счёт клиент-клиент минуя сервер, чтоб сделать личный чат между 2 пользователями по их желанию.Просто, не понятно, для каждой личной комнаты с юзером, сделать одинаковые формы. Написал тебе юзер 1, открылась одна форма, написал 2, открылась вторая в которой происходит обмен данными только между ними, к примеру можно сделать так же посыл определённой команды на сервер для этого(я так думаю)Так вот, как сделать создание этих форм?Надеюсь правильно изъяснился. Кстати, спасибо за адекватный ответ. |
|||
карма: 1 |
|
Ответов: 4633
Рейтинг: 749
|
|||
Azerate писал(а): так же посыл определённой команды на сервер для этогоТо-есть, сервер ведет учет всех сообщений. Для отправки сообщений в публичный чат клиент посылает команду "сообщение всем". Сервер рассылает это сообщение всем подключениям. Для отправки в приват посылаем команду "отправить сообщение указанному пользователю". Сервер перенаправляет его только нужному пользователю. Почему сервер должен мониторить и накапливать все сообщения? Пользователь, войдя в систему, должен иметь возможность получить все "непрочитанные" сообщения (или за некоторый период). Форма для приватных сообщений может быть и одна. Просто перед открытием запросить у сервера все сообщения между тобой и указанным пользователем и отобразить их в этой форме. |
|||
карма: 26 |
|
Ответов: 4
Рейтинг: 0
|
|||
Netspirit писал(а): Пользователь, войдя в систему, должен иметь возможность получить все "непрочитанные" сообщения (или за некоторый период).Netspirit писал(а): Форма для приватных сообщений может быть и одна. Просто перед открытием запросить у сервера все сообщения между тобой и указанным пользователем и отобразить их в этой форме. |
|||
карма: 1 |
|
Ответов: 4633
Рейтинг: 749
|
|||
Копать в сторону ChildFormEx
|
|||
карма: 26 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Netspirit писал(а): Копать в сторону ChildFormExА лучше в сторону ChildFormPoly, особенно, если много различных форм |
|||
карма: 22 |
|
Ответов: 1343
Рейтинг: 31
|
|||
а по мне ещё лучше использовать чисто 1 приложение с параметрами при запуске и связью с основным в виде MailSlot
в итоге мы получим совершенно другую программу, которая не будет мешать самому центру ВИЗУАЛЬНЫМИ примочками... таким образом щас работает куча программ... то есть предлагаю запуск всего, что связанно НЕ с центром, через внешние дополнения ввиде exe файлов принимающих параметры запуска. |
|||
карма: 2 |
|
Ответов: 9906
Рейтинг: 351
|
|||
[offtop]Созревает еще один кодер, которого визуальные примочки утомили
Внимание, Гусары -- МАЛЧАТЬ Не показывайте ему нипочем, где лежит "правильный" GlobalVarEx [/offtop] |
|||
карма: 9 |
| ||
Голосовали: | Tad |
10