ソケットテクノロジーを使用して、オンラインチャットルームとプライベートチャット機能を実装すると、特定のコンテンツは次のとおりです
これ以上苦労せずに、写真を撮りましょう:
1。チャットルームグループチャットページ
オンラインユーザーの連絡先リスト
ソケット接続ページ
プライベートチャットページ
プロジェクトの紹介
サーバーとのソケット接続を実装する:各クライアントがサーバーに接続すると、サーバーはリストコレクション内の各接続ソケットを保存します。
グループチャット機能:ユーザーがグループチャットメッセージをサーバーに送信すると、サーバーはすべての情報をリストリストのすべての接続クライアントに転送します。
プライベートチャット機能:ユーザーがプライベートチャット情報をサーバーに送信した後、サーバーはターゲットIPにメッセージを送信します。
オンライン連絡先リストを表示:新しいユーザーが正常にログインした場合、サーバーはJSON文字列の形でオンライン連絡先情報をクライアントに送信し、クライアントはJSON文字列を解析してオンライン連絡先情報を取得します。
強力なクラスのSocketEventをカスタマイズする:クライアントはサーバーと通信し、このクラスを通じてデータを保存し、FastJSONツールを使用してクラスオブジェクトをJSON文字列に変換するために変換します。
パブリッククラスSocketEvent {private int type = 0;プライベート文字列msg = "";プライベート文字列keyip = ""; //キーIPプライベート文字列companterip = ""; //一時IP public socketevent(){} public int getType(){return type; } public void setType(intタイプ){this.type = type; } public string getMsg(){return msg; } public void setmsg(string msg){this.msg = msg; } public string getKeyIp(){return keyip; } public void setKeyip(string keyip){this.keyip = keyip; } public string getTemporaryIp(){return companterip; } public void setemporaryip(string compantionip){this.temporaryip = commporyip; }}タイプ:現在送信されている情報の種類に署名します。サーバーとクライアントの解析データは、どのタイプのメッセージが属するかを決定するために使用されます。
public static final int chat_private = 111; //プライベートチャットの命令public static final int chat_group = 222; //グループチャットの命令public static final int socket_success = 333; //ソケット接続を成功させるための命令public static final int socket_fail = 444; //失敗したソケット接続の命令public static final int connect_success = 666; //ソケット接続を成功させるための命令public static final int connect_fail = 777; //ソケット接続のコマンドがpublic static final int login_arg = 888; //ソケットは、新しいユーザーpublic static final int cancel_arg = 999のログインに署名するためのコマンドを受信します。 //ユーザーのログインに署名するためのコマンドpublic static final int new_client = 3332; //新しいユーザーのログインに署名するためのコマンドPublic Static Final int all_client = 3432; //すべてのオンラインユーザーのログインに署名するためのコマンドPublic Static final int send_private = 5666; //プライベートチャットメッセージを送信するためのコマンドpublic static final int send_iplist = 6666; //ログインしたユーザーIPコレクションを送信する命令
KeyIP:クライアントメッセージイニシエーターのIPアドレス
温度:一時的なIPアドレス。プライベートチャットタイプのタイプの場合、このIPはターゲット連絡先のIPアドレスを表します。
Serversocket
1.クライアント接続を受信します
SocketSocketClient = server.accept();
2。スレッドをオンにして、クライアントからリアルタイムで情報を受信します
//クライアントがリアルタイムで送信したデータを取得@Override public void run(){while(true){if(acceptline = in.readline()) SocketEvent Event = json.ParseObject(AcceptLine、SocketEvent.Class); switch(event.getType()){case utilfactory.chat_group:sendmsgavoid(event.getKeyip()、acceptline);壊す; case utilfactory.send_private:event.settype(utilfactory.chat_private); sendmsgtarget(event.gettemporaryip()、json.tojsonstring(event));壊す; }}}} catch(Exception e){e.printstacktrace(); }}
3.指定されたIPSおよびメソッドにメッセージを送信する方法独自のIPSを除く他のすべてのIPSにメッセージを送信する方法。
//指定されたIPアドレスにメッセージを送信しますプライベートvoid sendmsgtarget(string targetip、string msg){int num = mlist.size(); for(int index = 0; index <num; index ++){socket msocket = mlist.get(index); string ip = msocket.getinetAddress()。gethostAddress(); if(ip.equals(targetip)){printwriter pout = null; try {pout = new Printwriter(new BufferedWriter(new outputStreamWriter(msocket.getOutputStream()、 "utf-8"))、true); pout.println(msg); // Method Returnを終了します。 } catch(ioexception e){e.printstacktrace(); }}}}}} // private private void sendmsgavoid(string resiship、string msstring){int num = mlist.size(); for(int index = 0; index <num; index ++){socket msocket = mlist.get(index); string ip = msocket.getinetAddress()。gethostAddress(); if(!ip.equals(risunip)){printwriter pout = null; try {pout = new Printwriter(new BufferedWriter(new outputStreamWriter(msocket.getOutputStream()、 "utf-8"))、true); pout.println(msstring); } catch(ioexception e){e.printstacktrace(); }}}}クライアントは、MainActivityでサーバーからのすべての情報を受け入れ、タイプに応じて再パッケージし、EventBusを使用して各フラグメントに情報を表示します。
@subscribe(threadmode = threadmode.main)public void privatechat(socket.event event){switch(event.getType()){case myApplication.chat_private://プライベートチャットルームにメッセージを投稿しますchatmessagebean bean = new chatmessagebean(); bean.setmsg(event.getmsg()); bean.setname(event.getKeyip()); bean.settype(chatmessagebean.others_arg); eventbus.getDefault()。post(bean);壊す;ケースmyApplication.send_private:sendmsg(json.tojsonstring(event));壊す; }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。