В последнее время я был довольно бездельничал, и мне было время, чтобы просмотреть некоторые технические приложения Java.
Мне нечего делать сегодня. Основываясь на протоколе UDP, я написал очень простую программу чата.
В моей нынешней работе используются гнезда редко, что также является простой памятью о программировании сети Java.
Давайте посмотрим на эффект:
Можно сказать, что эффект реализации очень, очень прост, но вы все равно можете просто увидеть принцип реализации.
Пользователи «Чат 001», Сяохонг и Сяолу болтали друг с другом за несколько слов, а Сяохей из «Чат 002» проигнорировал его и был одиноким.
Посмотрите на реализацию кода:
1. Прежде всего, реализация сервера сообщений, функция очень проста:
• Зарегистрируйте информацию клиента (в какую чат -комнату вы ввели и т. Д.);
• Построить объект сокета протокола UDP, чтобы принять сообщения, отправляемые каждым клиентом;
• Проанализируйте содержимое сообщения и нажмите информацию о чате к каждому клиенту в соответствующей чате;
пакет com.tsr.simplechat.receive_server; импорт java.io.ioexception; импорт java.net.datagrampacket; import java.net.datagramsocket; импорт java.net.socketException; import java.util.arraylist; import.momport.gashson. com.tsr.simplechat.bean.messageentity; import com.tsr.simplechat.client.chatclient; // Сервер чата общедоступный класс chatserver extends {// Программа занимает номер порта. // Сообщение принимает объект сокета Private Static DatagramSocket Server = null; // Словарь объект (ключ: идентификатор чата, значение: набор клиентов пользователей в этой чате); Private Static Hashmap <String, ArrayList <ChatClient >> Groups = новый HashMap <String, ArrayList <ChatClient >> (); // Constructor public Chatserver () {try {// Сообщение принимает инициализацию конструкции сервера объекта сокета = new DatagramSocket (port); } catch (socketException e) {e.printstacktrace (); }} // Зарегистрировать нового пользователя входа в вход в чат public static void LogingRoup (String GroupId, CatClient Client) {// Получить всех пользователей онлайн -пользователей чата через ArrayList в чате <TatClient> clients = Groups.get (GroupId); if (clients == null) {clients = new ArrayList <TatClient> (); } // Зарегистрировать пользователей, которые входят в чат на этот раз clients.add (client); // Обновление информации о чате Groups.put (GroupId, клиенты); } // Получить сообщение @Override public void run () {while (true) {petiveMessage (); }} private void eCetivemessage () {// UDP Packet Byte [] buf = new Byte [1024]; DataGrampacket packet = new DataGrampacket (buf, buf.length); while (true) {try {// принять пакет server.receive (packet); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); } // Проанализируйте пакет данных и получите информацию о чате string Content = new String (packet.getData (), 0, packet.getLength ()); // parse json данных через сторонний пакет GSON GSON = new GSON (); Сообщение me = gson.fromjson (content, messageTity.class); // Проанализируйте контент сообщений и получите всех онлайн -пользователей чата через идентификатор чата ArrayList <TatClient> clients = Groups.get (me.getGroupId ()); // подтолкнуть полученное сообщение каждому пользователю чата для (CatClient Client: Clients) {client.pushbackmessage (me); }}}}2. Клиентская программа все еще очень проста:
• Просто определяйте интерфейс клиентского чата.
• Построить сообщение Отправить объект сокета.
• Получите контент информационного поля чата и отправьте его на сервер.
пакет com.tsr.simplechat.client; import java.awt.button; import java.awt.event; import java.awt.frame; import java.awt.textarea; импорт java.awt.textfield; import java.awt.event.windowadapter; импорт java.awt.windowvent.windowvent.windowvent.windowvent.windowvent.window. java.io.ioexception; import java.net.datagrampacket; import java.net.datagramsocket; import java.net.inetadress; импорт java.net.socketException; импорт java.net.unknownhostexception; импорт com.tsr.simplechat.bean.messageEntity; com.tsr.simplechat.receive_server.chatserver; // Клиентская программа открытый класс chatclient extends {private static final long long longerveruiduid = 1l; // идентификатор чата частная строка GroupId; // клиентское имя пользователя Private String ClientName; // клиентское сообщение Отправка службы сокета Private DatagramSocket MSG_SEND; // сервисный порт частный окончательный порт int = 10000; // IP -адрес сервера Private InetAddress IP; // Клиент управление Textfield TF = New TextField (20); Textarea ta = new Textarea (); Кнопка Send = новая кнопка ("Отправить"); // Client Constructor public ChatClient (String GroupId, String ClientName) {super ("Зал чата:" + GroupId + "/" + clientName); this.clientName = clientName; this.groupid = GroupId; // Установить стиль клиентского интерфейса add ("North", TF); Добавить («Центр», TA); Добавить («Юг», отправить); setSize (250, 250); показывать(); // инициализировать init () для серверов, связанных с чатом; // Монитор AddWindowListener (new WindowDapter () {public void windowclose (windowEvent e) {// Закрыть сообщение отправки услуг msg_send.close (); // Закрыть клиентскую программу dispose (); System.Exit (0);}}); } // Инициализировать private void init () {// Зарегистрировать текущую информацию пользователя и чата на сервер chatserver.logingroup (GroupId, это); try {// Инициализировать сообщение отправки объекта сокета msg_send = new DatagramSocket (); // Укажите сервер сообщений try {ip = inetAddress.getByname ("127.0.0.1"); } catch (Unknownhostexception e) {System.out.println ("Unknownhostexception .."); }} catch (socketException e) {System.out.println ("Исключение соединения сокета .."); }} // Сообщение о отправке времени прослушивание общедоступного логического действия (событие evt, object arg) {if (evt.target.equals (send)) {try {// Получить строки ввода содержимого = tf.getText (); // Отправить сообщение send_message (content); // Очистить чат в поле tf.settext (null); } catch (Exception ioe) {System.out.print (ioe.getMessage ()); }} вернуть true; } // Отправить сообщение private void send_message (String Content) {// Format (json format) string message = messageformat (content); // инкапсулировать сообщение в UDP Packet Byte [] buf = message.getBytes (); DataGrampacket packet = new DataGrampacket (buf, buf.length, ip, порт); try {// Отправить сообщение msg_send.send (packet); } catch (ioException e) {System.out.println ("IO Exception .."); }} // Форматирование сообщений Private String MessageFormat (String Content) {StringBuffer buffer = new StringBuffer (); buffer.append ("{/" GroupId/":"). Append ("/" "). Append (GroupId) .append ("/",", "); buffer.append ("/" username/":/"). Append (clientName) .append ("/", "); Buffer.Append ("/"text/":/"). Append (content) .append ("/"}"); return buffer.tostring (); } // Получите последние новости о текущей чатской комнате с сервера (обратный вызов ..) public void propbackmessage (MessageEntity me) {ta.append (me.getUsername () + ":" + me.getText ()); ta.append ("/n"); }} 3. Используйте формат JSON для Parse.
пакет com.tsr.simplechat.bean; // Сообщение объекта публичного класса частное имя пользователя; частный строковый текст; public String getGroupid () {return GroupId; } public void setGroupid (String GroupId) {this.groupid = GroupId; } public String getUsername () {return username; } public void setUsername (string username) {this.username = username; } public String getText () {return Text; } public void setText (String Text) {this.Text = text; }}4. Хорошо, это в основном сделано здесь, и создайте тестовый класс.
• Включите сервер сообщений.
• Откройте три клиента, два из которых входят в «Чат 001», а другой входит в «Чат 002».
Импорт com.tsr.simplechat.client.chatclient; import com.tsr.simplechat.receive_server.chatserver; открытый тест класса {public static void main (string [] args) {Chatserver r = newatcherver (); R.Start (); ChatClient C1 = новый чат -клиент ("001", "Little Red"); ChatClient C2 = новый ChatClient ("001", "Little Green"); ChatClient C3 = новый чат -клиент ("002", "Little Black"); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.