Эта статья делится функцией чата Java Group для вашей ссылки. Конкретный контент заключается в следующем
Поддержка Java для протокола TCP:
-> Пакет java.net определяет два класса Serversocket и Socket, которые используются для реализации двунаправленных соединений, соответственно.
-> Клиент класс определяет клиента
пакет com.dragon.java.tcpchat; import java.io.ioexception; import java.net.socket; import java.net.unknownhostexception;/** * client * * @author auser * */public client {public void main (string args []) throws inollowexcept Сокет ("192.168.1.188", 10000); // поток, который отправляет информацию через статью New Clientsend (Client) .Start (); // Создать поток, который получает информацию New ClientReceive (Client) .Start (); // Поскольку вы хотите реализовать функцию чата вместо отправки информации только один раз, ни выходной поток, ни клиент не могут быть закрыты. // client.shutdownOutput (); // client.close (); }}-> Класс Clientsend определяет поток, в котором клиент отправляет информацию на сервер
пакет com.dragon.java.tcpchat; import java.io.ioexception; import java.io.printStream; import java.net.socket; import java.util.scanner;/** * Поток, где клиент отправляет информацию на сервер * * @author auser * */public clactordend extends extends extends extends extends extends extends extends extends extends extends extends extends extends extends extends {private Scanner; частная розетка; public Clientsend (сокет сокета) {this.socket = ocket; } @Override public void run () {scanner = new Scanner (System.in); try {printStream ps = new PrintStream (socket.getOutputStream ()); String line = ""; // блокировка отправки информации while ((line = scanner.nextline ())! = Null) {ps.println (line); }} catch (ioException e) {e.printstacktrace (); }}}-> Класс ClientReceive определяет поток, в котором клиент получает информацию о сервере
пакет com.dragon.java.tcpchat; import java.io.bufferedReader; импорт java.io.inputStreamReader; import java.net.socket;/** * Поток на клиенту получает информацию * * @author auser * */public clientReceive extends induic {private Socket Socket; public clientReceive (сокет сокета) {this.socket = socket; } @Override public void run () {try {bufferedReader br = new BufferedReader (new InputStreamReader (socket.getInputStream ())); // получение информации по строке строки = ""; while ((line = br.readline ())! = null) {System.out.println (line); }} catch (Exception e) {e.printstackTrace (); }}}-> Сервер определения класса сервера
Пакет com.dragon.java.tcpchat; import java.io.ioexception; import java.net.serversocket; import java.net.socket; import java.util.arraylist; import java.util.list;/** * Сервер * * @author auser */public class server {public static void main (string] arwesexcection, throleex jemex jemex justex probreex prowexcection) {List <Socket> list = new ArrayList <> (); // Создать сервер Socket Serversocket Server = New Serversocket (10000); while (true) {// Блокировка метода получения клиентского сокета сокета = server.accept (); // Проектирование нескольких потоков, которые могут добавлять или удалять набор, синхронизированный (список) {list.add (сокет); } // запустить новый поток для обработки связи этого клиента New Handlesocket (Socket, List) .start (); } // Поскольку вы не знаете, когда клиент отправляет информацию, сервер должен быть включен и не может быть отключен. }}-> Класс handlesocke работает на клиентах, подключенных к серверу (верхний и автономный
пакет com.dragon.java.tcpchat; импорт java.io.bufferedReader; импорт java.io.ioexception; импорт java.io.inputStreamReader; импорт java.io.printStream; импорт java.net.inetaddress; импорт java.net.socket; import java.util.list. частный список <cocket> список; / *** Constructor** @param Socket* В настоящее время подключенный клиент* @param list* Коллекция хранимых подключенных клиентов*/ public handlesocket (сокет сокета, список <socket> list) {this.socket = socket; this.list = list; } / *** Метод запуска потока* / @Override public void run () {inetAddress address = socket.getinetAddress (); // Получить адрес клиента, подключенный к серверу string ip = address.gethostaddress (); System.out.println (ip + "Давай перейдем к Интернету!"); if (ip.equals ("192.168.1.117")) {synchronized (list) {sendtoall (ip + "в черном списке из -за нарушения!"); list.remove (ocket); } возвращаться; } try {bufferedReader br = new BufferedReader (new InputStreamReader (socket.getInputStream (), "gbk")); String line = ""; while ((line = br.readline ())! = null) {String msg = ip + ":" + line; System.out.println (MSG); // Вывод на консоли сервера // Отправить то, что этот клиент говорит всем другим клиентам SendToall (MSG); }} catch (ioException e) {// e.printstacktrace (); System.out.println (ip + "ОФИЦИОННАЯ!"); синхронизированный (list) {list.remove (socket); }}} / ** * Отправить информацию всем клиентам и удалить текущий сокет * * @param msg * информация, отправленная * / private void sendtoall (string msg) {synchronized (list) {for (socket s: list) {if (s! = Socket) {try {printStream ps = new PrintStream (s.getTultirem (s! =); ps.println (); } catch (ioException e) {e.printstackTrace (); }}}}}}}}}} -> Примечание. Потому что, чтобы клиент мог подключаться к серверу, то есть клиент должен сначала найти сервер, поэтому сервер должен быть включен сначала, а затем сервер ...
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.