この記事では、リファレンスのJavaグループチャット機能を共有しています。特定のコンテンツは次のとおりです
TCPプロトコルのJavaサポート:
- > java.netパッケージは、それぞれ双方向接続を実装するために使用される2つのクラスのサーバーソケットとソケットを定義します。
- >クライアントクラスはクライアントを定義します
パッケージcom.dragon.java.tcpchat; Import java.io.ioexception; Import java.net.socket; import java.net.unknownhostexception;/** * client * * @author auser * */public class client {public static void main(String args [] shrowshostexception、ioexextex、ioexction = socketソケット( "192.168.1.188"、10000); // new ClientsEnd(client).start()を介して情報を送信するスレッド; //情報を受信するスレッドを作成しますnew ClientReceive(client).start(); //情報を一度だけ送信するのではなく、チャット機能を実装するため、出力ストリームもクライアントも閉じることはできません。 // client.shutdownoutput(); // client.close(); }}- >クライアントエンドクラスは、クライアントがサーバーに情報を送信するスレッドを定義します
パッケージcom.dragon.java.tcpchat; Import java.io.ioexception; Import java.io.printstream; import java.net.socket; Import java.util.scanner;/** *クライアントがサーバーに情報を送信する場所 * * * @author auser */public classesswersプライベートソケットソケット。 public clientsend(socket socket){this.socket = socket; } @Override public void run(){scanner = new scanner(system.in); try {printStream ps = new PrintStream(socket.getOutputStream());文字列line = ""; // [情報の送信] while((line = scanner.nextline())!= null){ps.println(line); }} catch(ioexception e){e.printstacktrace(); }}}- > clientReceiveクラスは、クライアントがサーバー情報を受信するスレッドを定義します
パッケージcom.dragon.java.tcpchat; import java.io.bufferedreader; Import java.io.inputStreamReader; Import java.net.socket;/** *スレッドはクライアントに情報を受信します * * @author auser * */public class client clientReceive {private socket; public clientReceive(socket socket){this.socket = socket; } @Override public void run(){try {bufferedReader br = new BufferedReader(new inputStreamReader(socket.getInputStream()); // line string line = ""で情報を受信します。 while((line = br.readline())!= null){system.out.println(line); }} catch(例外e){e.printstacktrace(); }}}- >サーバークラス定義サーバー
パッケージcom.dragon.java.tcpchat;インポートjava.io.ioexception;インポートjava.net.serversocket; import java.net.socket; import java.util.arraylist; import java.util.list;/** * server * * @author */public class server {public static viid agus [] static agus []中断されたException {List <Socket> list = new ArrayList <>(); //サーバー側のソケットServersocket Server = new Serversocket(10000)を作成します。 while(true){//クライアントソケットソケット= server.accept()を受信するブロック方法; //セットを追加または削除する可能性のある複数のスレッドを設計する、同期(list){list.add(socket); } //このクライアントの通信を処理する新しいスレッドを起動します新しいハンドルソケット(socket、list).start(); } //クライアントがいつ情報を送信するかわからないため、サーバーをオンにしてオフにすることはできません。 }}- >ハンドルソケットクラスは、サーバーに接続されたクライアントで動作します(上限とオフライン通知、ブロッキングと脅迫、各クライアントへの情報の送信など)
パッケージcom.dragon.java.tcpchat; import java.io.bufferedreader; Import java.io.ioexception; Impture java.io.inputStreamReader; Import Java.net.inetAddress; Import Java.net.net.scapte。ソケット;プライベートリスト<Socket>リスト; / ** constructor** @param socket*現在接続されているクライアント* @paramリスト*保存された接続されたクライアントのコレクション*/ publicハンドルソケット(Socket Socket、list <Socket> list){this.socket = socket; this.list = list; } / ***スレッドrun method* / @override public void run(){inetAddress address = socket.getinetAddress(); //サーバー文字列に接続されたクライアントのアドレスを取得しますip = address.gethostaddress(); System.out.println(ip + "Let's Go online!"); if(ip.equals( "192.168.1.117")){synchronized(list){sendtoall(ip + "違反のためにブラックリスト!"); list.remove(socket); } 戻る; } try {bufferedReader br = new BufferedReader(new inputStreamReader(socket.getInputStream()、 "gbk"));文字列line = ""; while((line = br.readline())!= null){string msg = ip + ":" + line; System.out.println(msg); //サーバーコンソールへの出力}} catch(ioexception e){// e.printstacktrace(); system.out.println(ip + "offlined!");同期(list){list.remove(socket); }}} / ** *すべてのクライアントに情報を送信し、現在のソケットを削除 * * @param msg * / private void sendtoall(string msg){synchronized(list){for(s!= socket){if(s!= socket){try {printstream ps = new printstream(s.getottuptupttream(s.getottupttream); ps.println(); } catch(ioexception e){e.printstacktrace(); }}}}}}}}}}} - >注:クライアントがサーバーに接続できるようにするため、つまり、クライアントは最初にサーバーを見つける必要があるため、サーバーを最初に有効にしてからサーバーを有効にする必要があります...
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。