亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

使用socket實現網絡聊天室和私聊功能

2024-07-13 10:14:45
字體:
來源:轉載
供稿:網友

使用socket技術實現網絡聊天室和私聊功能,具體內容如下

話不多說先上圖:

1、聊天室群聊頁面

socket,聊天室,私聊

在線用戶的聯系人列表

socket,聊天室,私聊

socket連接頁面

socket,聊天室,私聊

私聊頁面

socket,聊天室,私聊

項目介紹

與服務端實現socket連接:每個客戶端連接到服務器的時候,服務器會將每個連接的socket保存在list集合中。

群聊功能:當有一個用戶發送群聊消息給服務器的時候,服務器會將所有信息轉發給list列表中的所有已連接的客戶端。

私聊功能:用戶發送私聊信息給服務器后,服務器會向一個目標ip發送消息。

顯示在線聯系人列表:當有新用戶登錄成功的時候,服務器會將在線聯系人的信息用json字符串的形式發送給客戶端,客戶端通過解析json字符串來獲取在線聯系人的信息。

自定義一個強大的類SocketEvent:客戶端與服務器通信全部都是通過這個類來保存數據的,然后使用fastjson工具來把類對象轉換為json字符串來傳輸。

public class SocketEvent {  private int type =0;  private String msg ="";  private String keyIP =""; // 關鍵IP  private String temporaryIP =""; // 臨時IP  public SocketEvent() {  }  public int getType() {    return type;  }  public void setType(int type) {    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 temporaryIP;  }  public void setTemporaryIP(String temporaryIP) {    this.temporaryIP = temporaryIP;  }}

type: 標志當前發送的信息是什么類型的信息。服務端和客戶端解 析數據就是通過這個它來判斷屬于哪種類型的消息

public static final int CHAT_PRIVATE = 111; // 私聊的指令  public static final int CHAT_GROUP = 222; // 群聊的指令  public static final int SOCKET_SUCCESS = 333; // socket連接成功的指令  public static final int SOCKET_FAIL = 444; // socket連接失敗的指令  public static final int CONNECT_SUCCESS = 666; // socket連接成功的指令  public static final int CONNECT_FAIL = 777; // socket連接失敗的指令  public static final int LOGIN_ARG = 888; // socket接收到標志新用戶登錄的指令  public static final int CANCEL_ARG = 999; // socket接收到標志用戶注銷的指令  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地址

temperoryIP:臨時的IP地址,如果是type是私聊類型的那么這個ip代表的就是目標聯系人的ip地址

服務端代碼 (ServerSocket)

1. 接收客戶端的連接

Socket Socketclient = server.accept();

2.開啟線程實時接收來自客戶端的信息

// 實時獲取客戶端發送的數據    @Override    public void run() {      try {        while (true) {          if ((acceptLine = in.readLine()) != null) {            System.out.println("<接收到的消息是>" + acceptLine);            SocketEvent event = JSON.parseObject(acceptLine, SocketEvent.class);            switch (event.getType()) {            case UtilFactory.CHAT_GROUP:              sendMsgAvoid(event.getKeyIP(), acceptLine);              break;            case UtilFactory.SEND_PRIVATE:              event.setType(UtilFactory.CHAT_PRIVATE);              sendMsgTarget(event.getTemporaryIP(), JSON.toJSONString(event));              break;            }          }        }      } catch (Exception e) {        e.printStackTrace();      }    }


3. 向指定ip發送消息的方法和除了自己ip向其他所有ip發送消息的方法

// 向指定的ip地址發送消息    private 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);            // 退出方法            return;          } catch (IOException e) {            e.printStackTrace();          }        }      }    }    // 向除了這個ip以外的所有ip發送    private void sendMsgAvoid(String avoidIP, 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(avoidIP)) {          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中接受來自服務端的所有信息,根據type來進行再次分裝,使用Eventbus將信息發送給各個fragment來進行展示

@Subscribe(threadMode = ThreadMode.MAIN)  public void privateChat(SocketEvent event) {    switch (event.getType()) {      case MyApplication.CHAT_PRIVATE:        // 將消息post給私聊聊天室        ChatMessageBean bean = new ChatMessageBean();        bean.setMsg(event.getMsg());        bean.setName(event.getKeyIP());        bean.setType(ChatMessageBean.OTHERS_ARG);        EventBus.getDefault().post(bean);        break;      case MyApplication.SEND_PRIVATE:        sendMsg(JSON.toJSONString(event));        break;    }  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久国产精品999| 国产视频在线观看一区二区| 日韩国产精品亚洲а∨天堂免| 精品国产网站地址| 日韩一区二区精品视频| 欧美激情在线狂野欧美精品| 亚洲精品999| 欧美专区在线视频| 91成人在线观看国产| 亚洲第一区中文99精品| 理论片在线不卡免费观看| 日韩成人xxxx| 在线日韩第一页| 色综合视频一区中文字幕| 日韩欧美在线免费观看| 91免费视频国产| 美女视频久久黄| 日本高清久久天堂| 久久久久久噜噜噜久久久精品| 日韩欧美在线观看| 欧美一区深夜视频| 九九热这里只有在线精品视| 国产91av在线| 国产欧美一区二区| 欧美激情精品久久久久久蜜臀| 日韩精品黄色网| 欧美人在线观看| 在线看日韩欧美| 日韩在线免费高清视频| 日韩麻豆第一页| 久久99精品久久久久久青青91| 欧美国产精品人人做人人爱| 91香蕉嫩草神马影院在线观看| 成人a视频在线观看| 久久精品影视伊人网| 中文字幕精品网| 国产999在线| 上原亚衣av一区二区三区| 久久久精品2019中文字幕神马| 2021国产精品视频| 亚洲а∨天堂久久精品喷水| 欧美日韩成人在线观看| 国产精品福利无圣光在线一区| 亚洲视频欧美视频| 91精品国产高清久久久久久久久| 欧美一级免费视频| 国产网站欧美日韩免费精品在线观看| 亚洲天堂色网站| 在线观看日韩专区| 91精品国产777在线观看| 欧美精品在线极品| 日本午夜在线亚洲.国产| 欧美一区二区三区四区在线| 性色av一区二区咪爱| 午夜精品国产精品大乳美女| 成人网在线视频| 精品中文字幕视频| 亚洲国产精久久久久久久| 国产99在线|中文| 亚洲网站在线播放| 日韩免费高清在线观看| 日韩精品极品在线观看播放免费视频| 国产日产欧美a一级在线| 97精品在线视频| 国产精品成人国产乱一区| 精品久久久免费| 久久人人97超碰精品888| 久久99久久久久久久噜噜| 久久视频在线视频| 一本色道久久88精品综合| 日韩电影免费观看中文字幕| 成人疯狂猛交xxx| 久久精品成人欧美大片| 久久人人爽国产| 美女福利视频一区| 午夜精品久久久久久久男人的天堂| 2025国产精品视频| 亚洲电影成人av99爱色| 欧美福利视频网站| 色综合久综合久久综合久鬼88| 中文字幕成人精品久久不卡| 456国产精品| 欧美精品一区二区免费| 欧美国产一区二区三区| 中文字幕亚洲情99在线| 伊人久久久久久久久久久| 亚洲va国产va天堂va久久| 久热精品视频在线观看一区| 深夜福利亚洲导航| 欧美猛少妇色xxxxx| 欧美性xxxx18| 精品久久久久久亚洲精品| 久久免费精品日本久久中文字幕| 热久久免费视频精品| 欧美日韩国产丝袜美女| 66m—66摸成人免费视频| 欧美日韩中文字幕| 国内精品久久久久久影视8| 日韩精品视频在线播放| 97国产在线观看| 97超级碰碰人国产在线观看| 日韩欧美在线免费| 亚洲欧美日韩久久久久久| 国产成人精品av在线| 九九热精品视频| 国产精品美女免费| 亚洲欧洲黄色网| 91久久嫩草影院一区二区| 欧美裸身视频免费观看| 国内精品伊人久久| 亚洲欧美国产精品久久久久久久| 欧美老妇交乱视频| 5566成人精品视频免费| 国产日本欧美一区二区三区| 久久青草精品视频免费观看| 欧美黄色小视频| 在线日韩欧美视频| 欧美日韩国产精品专区| 欧美精品第一页在线播放| 萌白酱国产一区二区| 欧美激情中文字幕在线| 久久全球大尺度高清视频| 亚洲国产精品国自产拍av秋霞| 亚洲日本欧美中文幕| 亚洲精品欧美极品| 91日本在线视频| 国产不卡av在线免费观看| 久久91亚洲精品中文字幕| 日韩av中文字幕在线播放| 欧美在线影院在线视频| 久久久免费精品| 欧美日韩亚洲视频一区| 中文日韩在线视频| 欧美国产日韩一区二区在线观看| 亚洲自拍偷拍第一页| 国产精品久久久久久久久久久久久久| 成人国产精品久久久久久亚洲| 国产91在线高潮白浆在线观看| 日本久久久久久| 亚洲天堂男人天堂女人天堂| 久久久久久久影视| 亚洲精品欧美日韩| 亚洲精品永久免费| 庆余年2免费日韩剧观看大牛| 日韩电影中文字幕一区| 国产美女直播视频一区| 91久久久久久国产精品| 成人免费福利在线| 日韩成人av在线| 久久久久久国产精品| 亚洲影院色在线观看免费| 久久人人看视频| 亚洲自拍偷拍视频| 久久69精品久久久久久国产越南| 伊人一区二区三区久久精品| 精品亚洲夜色av98在线观看| 国产精品av网站| 97精品在线视频| 91成人天堂久久成人| 68精品久久久久久欧美| 久久久久久久久久久亚洲| 成人xvideos免费视频| 久久综合五月天| 中文综合在线观看|