Используйте технологию сокета для внедрения онлайн -чата и функций частного чата, конкретный контент заключается в следующем
Без лишних слов, давайте сделаем картину:
1. Страница чата чата в чате
Список контактов для онлайн -пользователей
Страница подключения сокета
Частный чат
Введение проекта
Реализуйте подключение сокета с сервером: когда каждый клиент подключается к серверу, сервер будет сохранять каждый подключенный сокет в коллекции списков.
Функция группового чата: когда пользователь отправляет на сервер групповый чат, сервер пересылает всю информацию всем подключенным клиентам в списке.
Функция частного чата: после того, как пользователь отправляет информацию о частном чате на сервер, сервер отправит сообщение в целевой IP.
Отображение списка контактов в Интернете: когда новый пользователь успешно входит в систему, сервер отправит онлайн -контактную информацию клиенту в форме строки JSON, а клиент получает контактную информацию онлайн, анализируя строку JSON.
Настройте мощный класс SocketEvent: клиент общается с сервером и сохраняет данные через этот класс, а затем используйте инструмент FastJson для преобразования объекта класса в строку JSON для передачи.
открытый класс SocketEvent {private int type = 0; частная строка msg = ""; Private String keyip = ""; // ключ IP Private String Temporaryip = ""; // временный ip public socketEvent () {} public int getType () {return type; } public void settype (int type) {this.type = type; } public String getMsg () {return msg; } public void setMsg (String msg) {this.msg = msg; } public String getKeyip () {return keyip; } public void setKeyip (string keyip) {this.keyip = keyip; } public String getTemporaryip () {return Temporaryip; } public void CettelPeraryip (String Temporaryip) {this.temporaryip = temporaryip; }}Тип: Подпишите, какой тип информации в настоящее время отправляется. Данные сервера и анализа клиента используются для определения того, к какому типу сообщения принадлежит.
Public Static Final int Chat_private = 111; // Инструкция для частного чата публичный статический финал int CHAT_GROUP = 222; // Инструкция для группового чата публичный статический финал int socket_success = 333; // Инструкция для успешного соединения сокета Public Static Final int socket_fail = 444; // инструкция для сбоя подключения к сокету общественного статического окончательного окончания int connect_success = 666; // инструкция для успешного соединения сокета Public Static Final int connect_fail = 777; // Команда для подключения к сокетинге не удалось общедоступным статическим окончательным окончанием int login_arg = 888; // Сокет получает команду для подписания входа в систему нового пользователя Public Static Final int cancel_arg = 999; // Команда для подписания входа в систему пользователя Public Static Final int new_client = 3332; // команда для подписания входа в систему нового пользователя Public Static Final int all_client = 3432; // Команда для подписания входа в систему всех пользователей онлайн -пользователей Public Static Final int send_private = 5666; // команда для отправки частных сообщений чата публично статическое окончательное окончательное значение int send_iplist = 6666; // Инструкция по отправке коллекции IP-файлов пользователей в регистрации
Keyip: IP -адрес инициатора сообщений клиента
Температура: временный IP -адрес. Если это тип, который является частным типом чата, то этот IP -адрес представляет IP -адрес целевого контакта.
Serversocket
1. Получить клиентское соединение
Socket SocketClient = server.accep ();
2. Включите поток, чтобы получить информацию от клиента в режиме реального времени
// Получить данные, отправленные клиентом в реальном времени @Override public void run () {try {while (true) {if ((accept in in.readline ())! = Null) {System.out.println ("<Понятое сообщение>" + принять); Socketevent event = json.parseobject (acceptline, socketevent.class); switch (event.getType ()) {case utilfactory.chat_group: sendmsgavoid (event.getkeyip (), accept line); перерыв; case utilfactory.send_private: event.settype (utilfactory.chat_private); sendmsgtarget (event.getTemporaryip (), json.tojsonstring (event)); перерыв; }}}} catch (Exception e) {e.printstacktrace (); }}
3. Методы отправки сообщений на указанные IPS и методы для отправки сообщений всем остальным IPS, за исключением ваших собственных IPS.
// Отправить сообщение в указанный IP -адрес private void sendmsgtarget (string targetip, string msg) {int num = mlist.size (); for (int index = 0; index <num; index ++) {сокет msocket = mlist.get (index); String ip = msocket.getinetAddress (). Gethostaddress (); if (ip.equals (targetip)) {printwriter pout = null; try {pout = new PrintWriter (New BufferedWriter (новый outputStreamWriter (msocket.getOutputStream (), "UTF-8")), true); pout.println (msg); // возврат метода выхода; } catch (ioException e) {e.printstackTrace (); }}}}} // Отправить private void sendmsgavoid (string vesermip, string msstring) {int num = mlist.size (); for (int index = 0; index <num; index ++) {сокет msocket = mlist.get (index); String ip = msocket.getinetAddress (). Gethostaddress (); if (! ip.equals (избегание)) {printwriter pout = null; try {pout = new PrintWriter (New BufferedWriter (новый outputStreamWriter (msocket.getOutputStream (), "UTF-8")), true); pout.println (msstring); } catch (ioException e) {e.printstackTrace (); }}}}Клиент принимает всю информацию с сервера в MainActivity, переупаковки в соответствии с типом и использует Eventbus для отправки информации в каждый фрагмент для отображения.
@Subscribe (threadmode = threadmode.main) public void privateChat (ocectEvent event) {switch (event.getType ()) {case myApplication.chat_private: // Разместите сообщение в частную чат Chatmessagebean bean = new Chatmessagebean (); bean.setmsg (event.getmsg ()); bean.setname (event.getKeyip ()); bean.settype (Chatmessagebean.others_arg); EventBus.getDefault (). Post (Bean); перерыв; case myApplication.send_private: sendmsg (json.tojsonstring (event)); перерыв; }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.