이 기사에서는 참조에 대한 Java Group Chat 기능을 공유합니다. 특정 내용은 다음과 같습니다
TCP 프로토콜에 대한 Java 지원 :
-> java.net 패키지는 각각 양방향 연결을 구현하는 데 사용되는 두 개의 클래스 서사 소켓과 소켓을 정의합니다.
-> 클라이언트 클래스는 클라이언트를 정의합니다
package com.dragon.java.tcpchat; import java.io.ioexcept; import java.net.socket; import java.net.unct java.net.unknownhostexception;/** * client * * @author auser */public class client {public static void main (String args []) unkencection, ioexception {socket {newexception = new {socket = {socket and a public args []). 소켓 ( "192.168.1.188", 10000); // 조각을 통해 정보를 보내는 스레드 새 ClientSend (client) .start (); // 정보를 수신하는 스레드를 작성합니다. // 한 번만 정보를 보내는 대신 채팅 기능을 구현하려면 출력 스트림이나 클라이언트를 닫을 수 없습니다. // client.shutdownOutput (); // client.close (); }}-> clientend 클래스 클라이언트가 서버에 정보를 보내는 스레드를 정의합니다.
package com.dragon.java.tcpchat; import java.io.ioexception; import java.io.printstream; import java.net.socket; import java.util.scanner;/** * 스레드는 클라이언트가 서버로 정보를 보내는 스레드 * * @author auser */public classender invirals strender {private classend {private classend {private classender intrends rse em; 개인 소켓 소켓; 공개 클라이언트 엔드 (소켓 소켓) {this.socket = 소켓; } @override public void run () {스캐너 = 새 스캐너 (System.In); try {printstream ps = new PrintStream (socket.getOutputStream ()); 문자열 line = ""; // 정보 전송 차단 while }} catch (ioexception e) {e.printstacktrace (); }}}-> ClientReceive Class 클라이언트가 서버 정보를 수신하는 스레드를 정의합니다.
package com.dragon.java.tcpchat; import java.io.bufferedReader; import java.io.inputStreamReader; import java.net.socket;/** * 정보를받는 클라이언트의 스레드 * */public class clientReceive 스레드 {private socket kocket; Public ClientReceive (소켓 소켓) {this.socket = 소켓; } @override public void run () {try {bufferedReader br = new bufferedReader (new inputStreamReader (socket.getInputStream ())); // 줄에 의해 정보 수신 string line = ""; while ((line = br.readline ())! = null) {system.out.println (line); }} catch (예외 e) {e.printstacktrace (); }}}-> 서버 클래스 정의 서버
package com.dragon.java.tcpchat; import java.io.ioexception; import java.net.serversocket; import java.net.socket; import java.util.arraylist; import java.util.list;/** * server * * @author auser */public static void void (strows) InterruptedException {list <socket> list = new ArrayList <> (); // 서버 측 소켓 생성 서버 Server = New Serversocket (10000); while (true) {// 클라이언트 소켓을받는 차단 방법 = server.accept (); // 세트를 추가하거나 삭제할 수있는 여러 스레드 설계, 동기화 된 (list) {list.add (socket); } //이 클라이언트의 통신을 처리하기 위해 새 스레드를 시작합니다. 새 핸들 소트 (Socket, List) .start (); } // 클라이언트가 정보를 보낼 때를 알지 못하기 때문에 서버를 켜야하며 꺼질 수 없습니다. }}-> handlesocket 클래스는 서버에 연결된 클라이언트에서 작동합니다 (상단 및 오프라인 알림, 차단 및 협박, 각 클라이언트에게 정보 보내기 등)
package com.dragon.java.tcpchat; import java.io.bufferedReader; import java.io.ioException; import java.io.inputStreamReader; import java.io.printstream; import java.net.inetAddress; import java.net.sutick; 소켓; 개인 목록 <소켓> 목록; / *** 생성자** @param 소켓* 현재 연결된 클라이언트* @Param 목록* 저장된 연결된 클라이언트 모음*/ public handlesocket (소켓 소켓, 목록 <소켓> 목록) {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 (위반으로 인한 블랙리스트! "); list.remove (소켓); } 반품; } try {bufferedReader br = new bufferedReader (new inputStreamReader (socket.getInputStream (), "gbk")); 문자열 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 + "offlined!"); 동기화 (목록) {list.remove (소켓); }}} / ** * 모든 클라이언트에 정보를 보내고 현재 소켓을 제거 * * @param msg * * / private void sendtoall (string msg) {synchronized (list) {for (socket s : list) {if (s! = socket) {try {printstream ps = new printstream (s.getoutputsmeam ()); ps.Println (); } catch (ioexception e) {e.printstacktrace (); }}}}}}}}}}} -> 참고 : 클라이언트가 서버에 연결할 수 있도록하려면 클라이언트가 먼저 서버를 찾아야하므로 서버를 먼저 활성화 한 다음 서버를 활성화해야합니다 ...
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.