簡介
很多初學(xué)者都對網(wǎng)絡(luò)編程很感興趣但是,也很想實現(xiàn)一個聊天軟軟件??梢栽诩抑泻妥约旱暮门笥蚜奶?用自己做的軟件,那是個什么很開心 的事。這幾天寫了一個比較簡單的一對一聊天。
首先我先介紹一下整個項目的原理吧。 第一步 先寫服務(wù)端寫一些服務(wù)端對客戶端發(fā)送過來的數(shù)據(jù)進(jìn)行處理 我這里大部分都是json解析 。
第二步 寫服務(wù)端可能會用到數(shù)據(jù)庫? 這里用到了了mysql數(shù)據(jù)庫 對于數(shù)據(jù)庫的基本操作要有了解
第三步 寫客戶端? 客戶端用到了volley包 發(fā)送json數(shù)據(jù) 發(fā)送到服務(wù)端 服務(wù)端解析 給客戶端返回數(shù)據(jù)
很多項目的原理基本都是這 對于初學(xué)者 我覺得這對他們很重要 。
源碼介紹
雖然不能多客戶端操作,但是幾百個應(yīng)該沒問題。用戶登錄注冊這塊就不拿出來了,直接發(fā)核心的一部分。??
服務(wù)端 源碼介紹 :
服務(wù)端這塊用idea寫的 用到的jar包

其次部署tomcat 不會部署的小伙伴可以百度一下 都很簡單
然后編寫web-INT文件夾里的web.xml,直接在web-app標(biāo)簽里寫

簡單介紹下 上圖的上半部分是服務(wù)端收到客戶端的消息 來記錄下發(fā)送的數(shù)據(jù)添加到數(shù)據(jù)庫里 name是 send_person_message
訪問路徑是http://ip:port/項目名(由自己配置)/send_person_message
其次編寫servlet 類? ??

?接收客戶端發(fā)送過來的聊天消息 類

最上面有個注解 和web.xml里的name對應(yīng)
上圖的代碼功能 將客戶端的數(shù)據(jù)轉(zhuǎn)換為json 然后連接數(shù)據(jù)庫 將客戶端的qq_1 qq_2 message_1 message_2 取過來? ,
數(shù)據(jù)庫這部分簡介? ? ? ? ? ? ? ?當(dāng)初寫代碼太著急 其實不用 message_2? 只需要在數(shù)據(jù)庫里添加 qq_1 qq_2 message_1 就ok了,? 但是我這么寫不會有影響,對了還有一點提醒一下? qq_1的數(shù)據(jù)類型最好是int 自增長 設(shè)置主鍵 這樣可以防止qq號沖突,還有一些辦法大家可以自由發(fā)揮了.
? ? ? ? ?接著說將客戶端讀取過來的數(shù)據(jù)加入到數(shù)據(jù)庫 在將qq1 qq_2的聊天記錄取回來 返回一個集合??
? ? ? ? ? ? ? ? ? ?String sql ="select * from person_chart where(qq_1=? and qq_2=?) or (qq_1=? and qq_2=?)";
這相當(dāng)于讀取了聊天記錄 也可以每次設(shè)置讀取最后多少條,因為這里我客戶端沒用數(shù)據(jù)庫 所有的都在服務(wù)端這塊,所以每次返回都是所有聊天記錄。
客戶端請求 讀取聊天記錄的消息?

接下來 就介紹下客戶端 我主要用到的jar包 volley? ?和 evbus? 客戶端的就比較簡單了
先上最核心代碼? 客戶端與服務(wù)端互動??
requestQueue = Volley.newRequestQueue(PeronActivity.this);

發(fā)送成功后,可以開個計時器 一直響應(yīng)好友的聊天記錄,來讀取好友發(fā)過來的消息 ,計時器跟隨activity的摧毀而摧毀。
下面是我github里面的源碼 大家可以參考下載下
??https://github.com/zhaoyang1103/chatclient
對于有想法的小伙伴可以參考參考 最后赴上效果圖


