Чат на сокетах Java
Готов новый проект – чат Java. В нем посредством классов ServerSocket и Socket реализован обмен текстовыми сообщениями и файлами. Программа состоит из двух приложений - сервер и клиент. Первоначально запускается сервер, ждет подключения (запуска) клиента. После запуска клиента, они автоматически соединяются, и появляется возможность обмениваться по сокетам информацией. Работа происходит на одном компьютере (localhost, 127.0.0.1).
Как сервер, так и клиент могут отправлять друг другу тексты и файлы любого формата с помощь интерфейса Swing. История переписки хранится в базе данных типа SQLIte на сервере. Клиент и сервер могут вывести историю переписки за указанный период времени (год-месяц-число-час-минута). Клиент может быть только один.
В общем, все просто. Запускаете сервер, он ждет подключение клиента. После запуска клиента он автоматически подключается к серверу – все показывается на обоих экранах. После подключения вводите текст и нажимаете «Enter» - он отправляется собеседнику.
Если компоненты не в таком порядке, как на скрине, то можно порастягивать окно и потом в коде поставить нужные значения.
Можно отправлять файлы – кнопка «Отправить файл» - он появится рядом с файлом программы. Чтобы показать переписку, необходимо выбрать дату и время начала (часы и минуты), а также дату и время конца.
База данных SQlite состоит из одной таблицы, Чтобы посмотреть, что внутри файла baza001.sqlite, можно использовать DB Browser for SQLite - это чтобы было проще смотреть внутренности, я часто использую.
Код
Получилось два проекта: IntelliJ IDEA сервер, в Eclipse – клиент. Но вообще проекты универсальные и откроются в любой распространенной IDE для java.
Каждый код в своем файле. Server.java и Client.java. Есть небольшие комментарии, в методах используется обработка ошибок. Код написан правильно, но не идеально – так, как будто писал студент, а не реальный программист.
Вот, например, метод для записи сообщения в базу данных:
private static void InsertMail(String message, int tip) throws SQLException { Connection dbConnection = null; Statement statement = null; long unixTime = System.currentTimeMillis() / 1000L; if (tip!=1) { String insertSQL = "INSERT INTO mails (id, mail, 'datetim') values (NULL , '" + message + "', '" + unixTime + "')"; try { dbConnection = getDBConnection(); statement = dbConnection.createStatement(); // выполнить SQL запрос statement.execute(insertSQL); System.out.println("Успешно!"); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { if (statement != null) { statement.close(); } if (dbConnection != null) { dbConnection.close(); } } } }В этом коде вообще говоря лучше бы использовать класс PreparedStatement и его метод executeUpdate(), но и код выше вполне рабочий и отлично подойдет для учебного проекта.
Также необязательно использовать NULL для id таблицу у которой настроен автоинкремент на это поле. Но это не ошибка, а, скажем так, мелочь о которой студент не обязательно знает.
Если вам нужна готовая программа на java или консультация по программированию на этом языке – пишите. Все услуги платные.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.