私は最近かなりアイドル状態で、Javaの技術アプリケーションをレビューするのに時間がかかりました。
今日は何もすることはありません。 UDPプロトコルに基づいて、非常にシンプルなチャットルームプログラムを書きました。
私の現在の作業では、ソケットはめったに使用されません。これはJavaネットワークプログラミングの簡単なメモリでもあります。
効果を見てみましょう:
実装の効果は非常に単純であると言えますが、単に実装の原則を見ることができます。
「チャットルーム001」、Xiaohong、Xiaoluのユーザーは、「チャットルーム002」のXiaoheiが彼を無視し、孤独でした。
コードの実装をご覧ください。
1.まず、メッセージサーバーの実装では、関数は非常に単純です。
•クライアントの情報(入力したチャットルームなど)を登録します。
•各クライアントから送信されたメッセージを受け入れるようにUDPプロトコルソケットオブジェクトを構築します。
•メッセージコンテンツを分析し、対応するチャットルームの各クライアントにチャット情報を押し戻します。
パッケージcom.tsr.simplechat.receive_server; Import java.io.ioexception; Import java.net.datagrampacket; Import java.net.datagramsocket; import java.net.socketexception; import java.util.arraylist; import java.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.hashmap. com.tsr.simplechat.bean.messageEntity; Import com.tsr.simplechat.client.chatclient; //チャットサーバーパブリッククラスChatserver {//プログラムはポート番号を占有しますプライベート静的最終intポート= 10000; //メッセージはソケットオブジェクトを受け入れますプライベート静的データグラムソケットサーバー= null; //辞書オブジェクト(キー:チャットルームID、値:このチャットルームの下のクライアントユーザーのセット); private static hashmap <string、arraylist <chatclient >> groups = new hashmap <string、arraylist <chatclient >>(); // constructor public chatserver(){try {//メッセージは、ソケットオブジェクトサーバーのコンストラクト初期化を受け入れます= new Datagramsocket(port); } catch(socketexception e){e.printstacktrace(); }} //チャットルームに新しいログインユーザーを登録しますpublic static void logingroup(string groupid、chatclient client){//チャットルームArrayList <ChatClient>クライアント= Groups.get(GroupID)を介してチャットルームのすべてのオンラインユーザーを取得します。 if(clients == null){clients = new ArrayList <ChatClient>(); } //チャットルームに入るユーザーを登録今回はクライアント(クライアント); //チャットルーム情報groups.put(groupId、clients)を更新します。 } // message @override public void run(){while(true){receivemessage(); }} private void receivemessage(){// udp packet byte [] buf = new byte [1024]; datagrampacket packet = new datagrampacket(buf、buf.length); while(true){try {// packet server.receive(packet); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); } //データパケットを解析してチャット情報文字列content = new String(packet.getData()、0、packet.getLength()); //サードパーティパッケージを介してJSONデータを解析するGSON = new GSON(); messageEntity me = gson.fromjson(content、messageentity.class); //メッセージコンテンツを解析し、チャットルームID ArrayList <Chatclient> clients = groups.get(me.getGroupId())を介してチャットルームのすべてのオンラインユーザーを取得します。 //受信したメッセージをチャットルームの各ユーザーに戻します(ChatClient Client:Client){client.pushbackmessage(me); }}}}2。クライアントプログラムはまだ非常に単純です:
•クライアントチャットルームのインターフェイスを簡単に定義します。
•ソケットオブジェクトを送信するメッセージを作成します。
•チャット情報ボックスのコンテンツを取得し、サーバーに送信します。
パッケージcom.tsr.simplechat.client; import java.awt.button; import java.awt.event; import java.awt.frame; Import java.awt.textarea; Import java.awt.textfield; Import Java.awt.event.windowadapter; Import Java.aw.awt.event java.io.ioexception; Import java.net.datagrampacket; Import java.net.datagrasksocket; Import java.net.inetaddress; Import java.net.SocketException; Import java.net.uncondhostexception; com.tsr.simplechat.receive_server.chatserver; //クライアントプログラムパブリッククラスchatclient拡張フレーム{private static final long serialversionuid = 1l; //チャットルームIDプライベート文字列グループ。 //クライアントのユーザー名プライベート文字列clientName; //クライアントメッセージサービスソケットプライベートデータグラムソケットmsg_send; //サービスポートプライベートファイナルイントポート= 10000; //サーバーIPアドレスプライベートInetAddress IP; //クライアントコントロールTextfield TF = new Textfield(20); textarea ta = new Textarea();ボタン送信= newボタン( "send"); //クライアントコンストラクターPublic ChatClient(String GroupID、String ClientName){super( "チャットルーム:" + groupId + "/" + clientName); this.clientName = clientName; this.groupid = groupId; //クライアントインターフェイススタイルを設定する( "North"、tf); add( "center"、ta); add( "south"、send); SetSize(250、250);見せる(); //チャット関連サーバーのinit()を初期化します。 // AddWindowListener(new WindowAdapter(){public void windowclosing(windowevent e){//サービスの送信サービスmsg_send.close(); //クライアントプログラムdispose(); system.exit(0);}}); } // private void init(){//現在のユーザーとチャットルームの情報をサーバーchatserver.logingroup(groupid、this)に登録する; try {//ソケットオブジェクトの送信メッセージを初期化msg_send = new datagramsocket(); //メッセージサーバーを指定してくださいtry {ip = inetaddress.getByname( "127.0.0.1"); } catch(nown own owshostexception e){system.out.println( "nownownostexception .."); }} catch(socketexception e){system.out.println( "Socket Connection Exception .."); }} //メッセージの送信//メッセージsend_message(content); //チャットボックスTF.Settext(null)をクリアします。 } catch(例外IOE){System.out.print(ioe.getMessage()); }} trueを返します。 } //メッセージプライベートvoid send_message(string content){// message format(json format)string message = messageformat(content); //メッセージをudpパケットbyteにカプセル化します[] buf = message.getBytes(); datagrampacketパケット= new datagrampacket(buf、buf.length、ip、port); try {//メッセージmsg_send.send(packet); } catch(ioException e){system.out.println( "io exception .."); }} //メッセージフォーマットprivate string messageformat(string content){stringbuffer buffer = new StringBuffer(); buffer.append( "{/" groupid/":")。append( "/" ")。append(groupid).append("/"、"); buffer.append( "/" username/":/")。append(clientname).append( "/"、 "); buffer.append("/"text/":/")。append(content).append("/"}"); return buffer.toString(); } //サーバーから現在のチャットルームの最新ニュースを取得します(コールバック..)public void pushbackmessage(messageentity me){ta.append(me.getusername() + ":" + me.getText()); ta.append( "/n"); }} 3。メッセージエンティティクラス<br />これは、主にメッセージをオブジェクトにカプセル化するために使用されます。チャットルームID、メッセージ送信者のニックネーム、メッセージコンテンツ。 JSON形式を使用して解析します。
パッケージcom.tsr.simplechat.bean; // message entity public class messageentity {private string groupid;プライベート文字列ユーザー名;プライベート文字列テキスト; public string getGroupID(){return groupID; } public void setGroupid(string groupId){this.groupid = groupId; } public string getUsername(){return username; } public void setUsername(string username){this.username = username; } public string getText(){return text; } public void settext(string text){this.text = text; }}4。OK、基本的にここで行われ、テストクラスを作成します。
•メッセージサーバーをオンにします。
•3つのクライアントを開き、そのうち2つは「チャットルーム001」を入力し、もう1つは「チャットルーム002」に入ります。
Import com.tsr.simplechat.client.chatclient; Import com.tsr.simplechat.simplechat.receive_server.chatserver; public class test {public static void main(string [] args){chatserver r = new chatserver(); R.Start(); ChatClient C1 = new ChatClient( "001"、 "Little Red"); ChatClient C2 = new ChatClient( "001"、 "Little Green"); ChatClient C3 = new ChatClient( "002"、 "Little Black"); }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。