Эта статья разделяет пример для удовлетворения потребностей онлайн -веб -коммуникации. Из -за веб -версии функции онлайн -чата, реализованной Java Socket, для вашей ссылки, конкретный контент заключается в следующем
Шаги внедрения:
1. Используйте компонент AWT и сокет, чтобы реализовать простой единый клиент для постоянной отправки сообщений на сервер;
2. В сочетании с потоками реализуйте мульти-клиент подключение к серверу для отправки сообщений;
3. Реализовать серверы для пересылки клиентов для всех клиентов и одновременно отображать их на клиенте;
4. Измените интерфейс окна, сгенерированный компонентом AWT на интерфейс, отображаемый Front-End JSP или HTML, и измените клиента, реализованный Java Socket на реализацию технологии фронтальной технологии.
Здесь мы сначала реализуем простую функцию первого шага, сложность:
1. Я никогда не использовал компонент AWT и никогда не использовал события прослушивания, связанные с Java;
2. Я не использовал розетки в течение длительных периодов времени для взаимодействия между клиентом и сервером, и я действительно не разработал структуру CSS.
Код для реализации функции :
Клиент онлайн -чата:
1. Сгенерировать графический контур интерфейса окна
2. Добавьте близкое событие в контур
3. Добавьте область ввода и область отображения контента в контур
4. Добавьте событие возврата перевозки в область ввода
5. Установить соединение сервера и отправить данные
пакет чат.chat; импортировать java.awt.borderlayout; импортировать java.awt.frame; импортировать java.awt.textarea; импортировать java.awt.textfield; импортировать java.awt.event.actionevent; импортировать java.awt.event.actionlistener; импортировать java.awt.event.windowadapter; импортировать java.awt.event.windowevent; импортировать java.io.dataoutputstream; импортировать java.io.ioexception; импортировать java.net.socket; Импорт java.net.unknownhostexception; /** * Online chat client 1. Generate graphical window interface outline 2. Add a close event to the outline 3. Add an input area and a content display area to the outline 4. Add a carriage return event for the input area* 5. Establish a server connection and send data* * @author tuzongxun123 * */ public class ChatClient extends Frame { // User input area private TextField tfTxt = new TextField(); // Содержимое область отображения private textarea taste = new Textarea (); Приватный сокет = null; // выходной сигнал данных public static void main (string [] args) {new ChatClient (). Launcframe (); } / ** * Создать простое графическое окно * * @author: tuzongxun * @title: launcframe * @param * @return void * @date 18 мая 2016 г. 9:57:00 * @Throws * / public void launcFrame () {setLocation (300, 200); это. Setize (200, 400); Добавить (tftxt, borderlayout.south); Добавить (Tarea, Borderlayout.north); пакет(); // Слушайте событие закрытия окна графического интерфейса this.addwindowlistener (new windowdapter () {@override public void windowclose (windowevent e) {system.exit (0); dishonnect ();}}); tftxt.addactionListener (new tflister ()); setVisible (true); соединять(); } / ** * Подключиться к серверу * * @author: tuzongxun * @title: connect * @param * @return void * @date 18 мая 2016 г. 9:56:49 * @Throws * / public void Connect () {try {// Создать новое серверное соретинг = новый сокет ("127.0.0.1", 8888888888888 гг.; // Получить клиентский выходной поток DataOutputStream = new DataOutputStream (socket.getOutputStream ()); System.out.println («Подключиться к серверу»); } catch (Unknownhostexception e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }} / ** * Закрыть ресурсы клиентов * * @author: tuzongxun * @title: decknect * @param * @return void * @date 18 мая 2016 г. 9:57:46 * @throws * / public void disconnect () {try {dataoutputStream.close (); Socket.Close (); } catch (ioException e) {e.printstackTrace (); }} / ** * Отправить сообщение на сервер * * @author: tuzongxun * @title: sendmessage * @param @param text * @return void * @date 18 мая 2016 г. 9:57:56 AM * @Throws * / private void SendMessage (String Text) {try {DecAoutputStream.writeUtf (text); DataOutputStream.flush (); } catch (ioException e1) {e1.printstacktrace (); }} / ** * Область ввода графического окна для прослушивания события возврата перевозки * * @author tuzongxun123 * * / private class tflister реализует ActionListener {@Override public void actionPerformed (actionEvent e) {string text = tftxt.getText (). Trim (); TAMEAS.Settext (текст); tftxt.settext ("" "); // отправлять данные на сервер SendMessage (Text); }}} Сервер:
пакет чат.chat; импортировать java.io.datainputstream; импортировать java.io.eofexception; импортировать java.io.ioexception; импортировать java.net.bindexception; импортировать java.net.serversocket; импортировать java.net.socket; /*** Java использует компоненты сокета и AWT для простого реализации функции онлайн -чата. Сервер может реализовать сервер для постоянной отправки сообщений на сервер после подключения одного клиента*, но не поддерживает несколько клиентов к подключению одновременно. Причина в том, что после получения клиентского соединения в коде он будет продолжать слушать входные входы, вызывая закупорку*, чтобы сервер не мог прослушать другого клиента дважды. Если вы хотите его реализовать, вам нужно использовать асинхронное или многопоточное * * @author tuzongxun123 * */ public class Catserver {public static void main (string [] args) {// независимо ли сервер успешно логический iSstart = false; // сервер Socket Serversocket SS = NULL; // сокет клиентского сокета = null; // Сервер чтение клиента данных ввода потока ввода DataInputStream DataInputStream = null; try {// Start Server SS = New Serversocket (8888); } catch (bindException e) {System.out.println ("порт уже используется"); // закрыть программу System.Exit (0); } catch (Exception e) {e.printstackTrace (); } try {isstart = true; while (iSstart) {boolean isConnect = false; // запустить сокет прослушивания = ss.accept (); System.out.println ("один клиент Connect"); isConnect = true; while (isconnect) {// Получить клиент входной поток DataInputStream = new DataInputStream (socket.getInputStream ()); // Читать данные, передаваемые клиентским String Message = DataInputStream.readutf (); System.out.println («Клиент говорит:« + сообщение); }}} catch (eoFexception e) {system.out.println ("клиент закрыт!"); } catch (Exception e) {e.printstackTrace (); } наконец {// закройте соответствующий ресурс try {dataInputStream.close (); Socket.Close (); } catch (ioException e) {e.printstackTrace (); }}}}Продолжить, на основе одного клиентского соединения, второй шаг здесь требует реализации нескольких клиентских соединений, которые требуют использования потоков. Всякий раз, когда подключается новый клиент, сервер должен запустить новый поток для обработки, тем самым решая проблему блокировки в предыдущих показаниях цикла.
Обычно существует два метода для написания потоков: интеграция потока или реализация выполняемого интерфейса. В принципе, если он может быть реализован, он не будет унаследован, потому что способ реализации интерфейса более гибкий.
Клиентский код не изменялся по сравнению с ранее и стал сервером, поэтому здесь размещен только код сервера:
Java использует компоненты Socket и AWT и многопоточное, чтобы просто реализовать сервер функций онлайн-чата:
После того, как несколько клиентов подключены, сообщения постоянно отправляются на сервер. По сравнению с первой версией, основное внимание уделяется использованию многопоточного. Сервер еще не реализовал функцию пересылки. Клиент может видеть только информацию, введенную сами по себе в графическом окне, и не может видеть сообщения, отправляемые другими клиентами.
пакет чат.chat; импортировать java.io.datainputstream; импортировать java.io.eofexception; импортировать java.io.ioexception; импортировать java.net.bindexception; импортировать java.net.serversocket; импортировать java.net.socket; Импорт java.net.socketException; / ** * * * * @author tuzongxun123 * */ public class Chatserver {public static void main (string [] args) {new Chatserver (). start (); } // Является ли сервер успешно частным логическим iSstart = false; // Server Socket Private Serversocket ss = null; // клиентская розетка public void start () {try {// Start Server SS = New Serversocket (8888); } catch (bindException e) {System.out.println ("порт используется"); // закрыть программу System.Exit (0); } catch (Exception e) {e.printstackTrace (); } try {isstart = true; while (iSstart) {// Начать прослушивание сокета = ss.accept (); System.out.println ("один клиент Connect"); // запустить клиент Client Client Client = новый клиент (сокет); новый поток (клиент) .start (); }} catch (Exception e) {e.printstackTrace (); } наконец {// закройте службу try {ss.close (); } catch (ioException e) {e.printstackTrace (); }}} / ** * Клиентский поток * * @author tuzongxun123 * * / class client реализует runnable {// client socket private socket = null; // клиент входной поток private DataInputStream DataInputStream = null; Частный логический isconnect = false; public Client (Socket Socket) {this.socket = ocket; try {isconnect = true; // Получить клиент входной поток DataInputStream = new DataInputStream (socket.getInputStream ()); } catch (ioException e) {e.printstackTrace (); }} @Override public void run () {isConnect = true; try {while (isconnect) {// Прочитайте данные, передаваемые клиентским строкой = message = datainputStream.readutf (); System.out.println («Клиент говорит:« + сообщение); }} catch (eoFexception e) {System.out.println ("клиент закрыт!"); } catch (socketException e) {System.out.println ("Клиент закрыт !!!"); } catch (Exception e) {e.printstackTrace (); } наконец {// закройте соответствующий ресурс try {dataInputStream.close (); Socket.Close (); } catch (ioException e) {e.printstackTrace (); }}}}}Вышеуказанное в основном вводит функцию использования потоков, чтобы сервер приобретал несколько клиентных запросов. Здесь клиент должен получить многоплютные сообщения при пересылке сообщений каждому подключенному клиенту, и клиент должен иметь возможность отображать их в области отображения контента, тем самым реализуя простой онлайн-чат.
При реализации пересылки клиентов это не более чем увеличение выходного потока; Раньше клиент отправлял только, но не получил его, поэтому ему также необходимо изменить клиент для получения сообщений сервера по кругу, поэтому ему также необходимо реализовать многопоточное.
При реализации этой функции я случайно вспомнил функцию случайного генерирования кодов проверки, поэтому у меня было внезапное вдохновение для случайного генерирования имени для каждого клиента, так что при выводе он больше похож на групповой чат, не только вывод сообщения, но и может видеть, кто он.
После реализации этих функций вы можете одновременно иметь групповой чат онлайн для нескольких человек. Поскольку в коде есть основной метод, вы можете сделать как сервер, так и клиент в исполняемые пакеты JAR. Вы можете ссылаться на другой мой пост в блоге: используйте Eclipse, чтобы создать исполняемый пакет Java Program.
Затем дважды щелкните соответствующий файл JAR на рабочем столе, чтобы запустить сервер и клиента, и вам больше не нужно полагаться на запуск Eclipse.
Измененный клиент -код выглядит следующим образом:
пакет чат.chat; импортировать java.awt.borderlayout; импортировать java.awt.frame; импортировать java.awt.textarea; импортировать java.awt.textfield; импортировать java.awt.event.actionevent; импортировать java.awt.event.actionlistener; импортировать java.awt.event.windowadapter; импортировать java.awt.event.windowevent; импортировать java.io.datainputstream; импортировать java.io.dataoutputstream; импортировать java.io.ioexception; импортировать java.net.socket; Импорт java.net.unknownhostexception; импортировать java.util.random; /** * Клиент онлайн -чата: * 1. Создать графический контур интерфейса окна*2. Добавьте близкое событие для контура*3. Добавьте область ввода и область отображения контента в контур*4. Добавьте событие возврата каретки для области ввода*5. Установить соединение сервера и отправить данные * * @author tuzongxun123 * */ public Class ChatClient Extends Frame {/ ** * *// Private Static Final Long Serialversionuid = 1L; // область ввода пользователя Private TextField TFTXT = new TextField (); // Содержимое область отображения private textarea taste = new Textarea (); Приватный сокет = null; // выходной сигнал данных // Входной поток данных Private DataInputStream DataInputStream = null; Частный логический isconnect = false; Thread treceive = new Thread (new PreceivetHread ()); String name = ""; public static void main (string [] args) {ChatClient ChatClient = new ChatClient (); chatclient.createName (); chatclient.launcframe (); } / ** * Создать простое графическое окно * * @author: tuzongxun * @title: launcframe * @param * @return void * @date 18 мая 2016 г. 9:57:00 * @Throws * / public void launcFrame () {setLocation (300, 200); это. Setize (200, 400); Добавить (tftxt, borderlayout.south); Добавить (Tarea, Borderlayout.north); // Определите оптимальный размер кадра в соответствии с макетом в окне и предпочтительным размером компонентов (); // Слушайте событие закрытия окна графического интерфейса this.addwindowlistener (new windowdapter () {@override public void windowclose (windowevent e) {system.exit (0); dishonnect ();}}); tftxt.addactionListener (new tflister ()); // Установить окно, чтобы увидеть setVisible (true); соединять(); // запустить поток, который принимает сообщение treceive.start (); } / ** * Подключиться к серверу * * @author: tuzongxun * @title: connect * @param * @return void * @date 18 мая 2016 г. 9:56:49 * @Throws * / public void Connect () {try {// Создать новое серверное соретинг = новый сокет ("127.0.0.1", 8888888888888 гг.; // Получить клиентский выходной поток DataOutputStream = new DataOutputStream (socket.getOutputStream ()); DataInputStream = new DataInputStream (socket.getInputStream ()); System.out.println («Подключиться к серверу»); isConnect = true; } catch (Unknownhostexception e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); } } // Generate random client name public void createName() { String[] str1 = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}; Случайный ran = new Random (); for (int i = 0; i <6; i ++) {// long num = math.round (math.random () * (str1.length - 0)+0); // int n = (int) num; int n = ran.nextint (str1.length); if (n <str1.length) {string str = str1 [n]; имя = имя + str; System.out.println (имя); } else {i--; продолжать; }} this.setTitle (name); } / ** * Закрыть ресурсы клиентов * * @author: tuzongxun * @title: decnonce * @param * @return void * @date 18 мая 2016 г. 9:57:46 * @Throws * / public void Disconnect () {try {isConnect = false; // Остановить потоки treceive.join (); } catch (прерванное искусство e) {e.printstacktrace (); } наконец {try {if (dataOutputStream! = null) {dataOutputStream.close (); } if (socket! = null) {socket.close (); сокет = null; }} catch (ioException e) {e.printstacktrace (); }}} / ** * Отправить сообщение на сервер * * @author: tuzongxun * @title: sendmessage * @param @param text * @return void * @date 18 мая 2016 г. 9:57:56 * @throws * / private void sendmessage (String Text) {try {DataTputStream.WriteUtf (имя + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + " DataOutputStream.flush (); } catch (ioException e1) {e1.printstacktrace (); }} / ** * Зона ввода графического окна прослушивание перевозки перевозки. Событие возврата * * @author tuzongxun123 * * / private class tflister реализует ActionListener {@Override public void actionperformed (actionevent e) {string text = tftxt.getText (). Trim (); // Очистить информацию о области ввода tftxt.settext (""); // отправлять данные на сервер после нажатия перевозки в SendMessage (Text); }} закрытый класс RecementRements реализует runnable {@Override public void run () {try {while (isConnect) {String message = dataInputStream.readutf (); System.out.println (сообщение); String txt = TaxA.getText (); if (txt! = null &&! "". } TAMEAS.Settext (сообщение); }} catch (ioException e) {e.printstacktrace (); }}}} Модифицированный код сервера выглядит следующим образом:
пакет чат.chat; импортировать java.io.datainputstream; импортировать java.io.dataoutputstream; импортировать java.io.eofexception; импортировать java.io.ioexception; импортировать java.net.bindexception; импортировать java.net.serversocket; импортировать java.net.socket; Импорт java.net.socketException; импортировать java.util.arraylist; импортировать java.util.list; /** * Java использует компоненты Socket и AWT и многопоточное чтение для простого реализации сервера функций онлайн-чата: * Сервер реализует, что полученная информация клиента перенаправлена всем подключенным клиентам, и позволяет клиенту прочитать эту информацию и отображать ее в области отображения контента. * * @author tuzongxun123 * */ public class Chatserver {public static void main (string [] args) {new Chatserver (). start (); } // Является ли сервер успешно запустил частный логический iSstart = false; // Server Socket Private Serversocket ss = null; // клиентская розетка // Сохранить список сбора клиентов <Client> clients = new ArrayList <Client> (); public void start () {try {// запустить сервер ss = new Serversocket (8888); } catch (bindException e) {System.out.println ("порт используется"); // закрыть программу System.Exit (0); } catch (Exception e) {e.printstackTrace (); } try {isstart = true; while (iSstart) {// запустить прослушивание сокета = ss.accte (); System.out.println ("один клиент Connect"); // запустить клиент Client Client Client = новый клиент (сокет); новый поток (клиент) .start (); clients.add (клиент); }} catch (Exception e) {e.printstackTrace (); } наконец {// закройте службу try {ss.close (); } catch (ioException e) {e.printstackTrace (); }}} / ** * Клиентский поток * * @author tuzongxun123 * * / private class client реализует {// Client Socket Private Socket Socket = null; // клиент входной поток private DataInputStream DataInputStream = null; // клиентский выходной сигнал Private DataOutputStream DataOutputStream = null; Частный логический isconnect = false; public Client (Socket Socket) {this.socket = ocket; try {isconnect = true; // Получить клиент входной поток DataInputStream = new DataInputStream (socket.getInputStream ()); // Получить клиентский выходной поток DataOutputStream = new DataOutputStream (socket.getOutputStream ()); } catch (ioException e) {e.printstackTrace (); }} / ** * Объемная отправка (вперед) Данные к клиенту * * @author: tuzongxun * @title: sendmessagetoclients * @param @param message * @return void * @date 18 мая 2016 г. } catch (socketException e) {} catch (ioException e) {e.printstacktrace (); }} @Override public void run () {isConnect = true; Клиент C = NULL; try {while (isconnect) {// Прочитайте данные, передаваемые клиентским строкой = message = datainputStream.readutf (); System.out.println («Клиент говорит:« + сообщение); for (int i = 0; i <clients.size (); i ++) {c = client.get (i); C.sendmessagetoclients (сообщение); }}} catch (eoFexception e) {system.out.println ("клиент закрыт!"); } catch (socketException e) {if (c! = null) {client.remove (c); } System.out.println ("Клиент закрыт !!!"); } catch (Exception e) {e.printstackTrace (); } наконец {// закройте соответствующий ресурс try {if (datainputStream! = null) {dataInputStream.close (); } if (socket! = null) {socket.close (); сокет = null; }} catch (ioException e) {e.printstacktrace (); }}}}}}}}}}}}}}}}}}}}Давайте сначала представим его, а затем обновим его для вас, если есть какой -либо новый контент.
Что касается реализации функции веб -онлайн -чата, вы также можете обратиться к следующим статьям для обучения:
Java реализует простую обмен функцией чата TCPSocket
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что вы сможете продолжать обращать внимание на более захватывающий контент с wulin.com.