В этой статье описываются функции связи клиента и сервера, реализованные Java на основе сокета. Поделитесь этим для вашей ссылки, следующим образом:
Следующий код ссылается на чат -проект магии. Сначала запустите Chatserver.java, чтобы реализовать прослушивание порта, а затем запустите чат -клиент.java.
Экземпляр клиента
Chatclient.java
пакет socketDemo; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; открытый класс Chatclient Extends extends {сокет s = null; DataOutputStream dos = null; DataInputStream dis = null; Частный логический bconnected = false; Textfield tftxt = new TextField (); Textarea tacontent = new Textarea (); Thread trecv = new Thread (new RecVthread ()); public static void main (string [] args) {new ChatClient (). LaunchFrame (); } public void LaunchFrame () {setLocation (400, 300); это. Setize (300, 300); Добавить (tftxt, borderlayout.south); Добавить (Tacontent, Borderlayout.north); пакет(); this.addwindowlistener (new windowdapter () {@override public void windowclose (windowevent arg0) {dindoncect (); System.exit (0);}}); tftxt.addactionListener (new tflistener ()); setVisible (true); соединять(); trecv.start (); } public void connect () {try {s = new Socket ("LocalHost", 8888); dos = new DataOutputStream (s.getOutputStream ()); dis = new DataInputStream (S.GetInputStream ()); System.out.println ("Connected!"); bconnected = true; } catch (Unknownhostexception e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }} public void dinconct () {try {dos.close (); dis.close (); S.Close (); } catch (ioException e) {e.printstackTrace (); } / * * try {bconnected = false; trecv.join (); } catch (прерванная экспрессия * e) {e.printstacktrace (); } наконец {try {dos.close (); dis.close (); * s.close (); } catch (ioException e) {e.printstackTrace (); }} */} частный класс Tflistener реализует ActionListener {public void actionPerformed (actionEvent e) {string str = tftxt.getText (). trim (); // tacontent.settext (str); tftxt.settext ("" "); try {// System.out.println (s); dos.writeutf (str); dos.flush (); // dos.close (); } catch (ioException e1) {e1.printstacktrace (); } / // System.out.println (str); tacontent.settext (tacontent.getText () + str + '/n'); }} catch (socketException e) {System.out.println ("Выход, пока!"); } catch (eOfexception e) {System.out.println ("Исключение, пока - пока!"); } catch (ioException e) {e.printstackTrace (); }}}}Код сервера сокета
Чатсервер.java
пакет socketDemo; import java.io.*; import java.net.*; import java.util.*; Serversocket ss = null; List <Client> clients = new ArrayList <Client> (); public static void main (string [] args) {new ChatServer (). start (); } public void start () {try {ss = new Serversocket (8888); начал = true; } catch (bindException e) {System.out.println ("Порт в использовании ......"); System.out.println («Пожалуйста, закройте соответствующую программу и повторил сервер!»); System.Exit (0); } catch (ioException e) {e.printstackTrace (); } try {while (запустил) {stocket s = ss.accept (); Клиент C = новый клиент (ы); System.out.println («Клиент подключен!»); новый поток (c) .start (); clients.add (c); // dis.close (); }} catch (ioException e) {e.printstacktrace (); } наконец {try {ss.close (); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); }}} Класс Клиент реализует runnable {Private Socket S; Private DataInputStream dis = null; Private DataOutputStream dos = null; Частный логический bconnected = false; Общественный клиент (сокет S) {this.s = s; try {dis = new DataInputStream (S.GetInputStream ()); dos = new DataOutputStream (s.getOutputStream ()); bconnected = true; } catch (ioException e) {e.printstackTrace (); }} public void send (string str) {try {dos.writeutf (str); } catch (ioException e) {clients.remove (this); System.out.println («Другая сторона вышла! Я удалил ее из списка!»); // e.printstacktrace (); }} public void run () {try {while (bconnected) {string str = dis.readutf (); System.out.println (str); for (int i = 0; i <clients.size (); i ++) {client c = client.get (i); C.send (str); // System.out.println ("a String Send!"); } / * * for (iterator <client> it = client.iterator (); * it.hasnext ();) {client c = it.next (); C.send (str); } * / / * * Iterator <client> it = client.iterator (); * while (it.hasnext ()) {client c = it.next (); C.send (str); *} */}} catch (eOfexception e) {System.out.println ("клиент закрыт!"); } catch (ioException e) {e.printstackTrace (); } наконец {try {if (dis! = null) dis.close (); if (dos! = null) dos.close (); if (s! = null) {s.close (); // s = null; }} catch (ioException e1) {e1.printstacktrace (); }}}}}}Результаты локального тестового прогона:
После закрытия окна клиента сообщение о приглашении следующим образом:
Для получения дополнительной информации о контенте, связанном с Java, пожалуйста, ознакомьтесь с темами этого сайта: «Краткое изложение навыков программирования сокетов Java», «Сводка навыков файла Java и каталогов», «Учебное пособие по структуре данных Java и алгоритм», резюме навыков Java Operation Dom Node »и« Сводка операции Java Cache ».
Я надеюсь, что эта статья будет полезна для всех Java Programming.