Создание простого сетевого мессенджера

Я хочу создать в Java простой мессенджер в стиле конференц-связи по локальной сети, но понятия не имею, с чего начать.
Он должен иметь следующие особенности:

  • нет постоянного имени пользователя: пользователь должен иметь возможность вводить имя пользователя каждый раз, когда он присоединяется, но должен иметь возможность запомнить меня, если он часто его использует
  • простой интерфейс чата со всеми пользователями онлайн, отображаемыми справа и сообщениями чата в центре
  • приватный чат и возможность блокировки
  • Я не хочу готовый код, я хочу, чтобы кто-то объяснил мне, с чего начать и как это сделать, и что я должен знать (например, текстовое поле для ввода имени пользователя и прочего)
    Просто представьте, что это мессенджер, позволяющий всем сотрудникам в одном здании общаться друг с другом.

    3 ответа

    Хотя ваш вопрос довольно расплывчат, у вас, похоже, есть основы (сокеты и все такое) на месте. Я предлагаю вам начать с изучения Java-уроков All About Sockets и All About Datagrams на сайте Oracle, чтобы начать. Основным содержанием второго урока, который вы, возможно, захотите переварить, является часть о вещании (для целей автоматического обнаружения сервера).

    Вот как я могу реализовать реализацию на высоком уровне:

    • Реализуйте приложение, содержащее функциональность сервера И клиента в одном исполняемом файле.
    • Когда приложение запущено, запустите сервер, если другой сервер не обнаружен (автоматически или по указанию пользователя).
    • Всегда запускайте клиента. Это означает, что ни один выделенный сервер не будет использоваться, поскольку один из клиентов выступает в качестве сервера. Каждый клиент подключается к серверу (включая клиента, работающего на той же машине, что и сервер).

    Очевидно, существует множество способов сделать такое приложение. Я не говорю, что способ, который я описал, является лучшим. Однако он, вероятно, подходит для описанного вами варианта использования, и его реализация довольно проста.

    Похоже, вам нужно серверное приложение и клиентское приложение для каждого пользователя. Они будут общаться через сокеты. Сервер откроет ServerSocket и клиенты будут создавать Socket и подключиться к серверу, когда они хотят общаться.

    Сервер должен иметь возможность принимать соединения от клиентов. Сервер будет хранить все глобальные данные, например, о том, какие чаты существуют, кто в каждой и т. Д. Основное поведение состоит в том, что когда в чате несколько человек (клиентов), один клиент что-то скажет, это будет отправлено сервер через сокет. На сервере есть список всех клиентов (сокетов), находящихся в чате, и он отправляет сообщение каждому из них.

    Наконец, вы должны знать, что сервер должен быть многопоточным и, вероятно, потребуется новый поток для каждого подключаемого клиентского сокета.

    Поскольку вы не указываете, будет ли для этой цели сервер или нет, может быть, в дополнение к предыдущим ответам, вам будет интересна следующая ссылка:

    http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html

    Опция блокировки может быть реализована путем сохранения списка IP-адресов и игнорирования сообщений, приходящих с них.

    Вы также должны изучить учебник Swing, чтобы увидеть, как вы можете создавать окна, текстовые поля, текстовые области, кнопки и т. Д., Чтобы вы могли создать свой интерфейс:

    http://docs.oracle.com/javase/tutorial/uiswing/

    Вы можете легко сохранить пользователя, например, используя файл свойств, но, возможно, вы должны начать изучать Java с самого начала, если вы задаете такие вопросы.

    Другие вопросы по тегам