簡單聊天室

一、實(shí)驗內(nèi)容

實(shí)現(xiàn)一個簡單的聊天程序,要求能多人在線聊天。

二、實(shí)驗?zāi)康?/h5>

1、熟悉網(wǎng)絡(luò)編程的基本知識,掌握 Socket 套接字的使用。
2、加深網(wǎng)絡(luò)編程中對網(wǎng)絡(luò) TCP 協(xié)議的理解,以及采用 TCP 協(xié)議進(jìn)行的三次握手的具體過程。
3、鍛煉、學(xué)習(xí)查找相關(guān)資料來解決實(shí)際問題的實(shí)踐動手能力以及獨(dú)立解決問題的能力。
4、通過成品的制作,對理論知識的運(yùn)用,來培養(yǎng)學(xué)習(xí)興趣或者擴(kuò)展學(xué)習(xí)。

三、實(shí)驗步驟
一、實(shí)驗界面設(shè)計:

1、主要分為兩個界面:登陸界面和聊天界面。分別如下圖:

登陸界面:
登陸界面.png

聊天室界面:
聊天室界面.png
二、實(shí)驗詳細(xì)實(shí)現(xiàn)過程:

1、登陸模塊:
用戶首先注冊賬號,程序在后臺會將注冊賬號發(fā)送服務(wù)器,檢查注冊賬號是否重復(fù),若沒有同名,則登陸成功,界面跳轉(zhuǎn)到聊天界面。如果同名,彈出提示消息重新命名。
2、聊天模塊:
(1)界面組成:界面主要分為四大塊:顯示聊天記錄的文本域、發(fā)送消息的文本域、發(fā)送消息或者取消按鈕、顯示在線用戶 List 組件。
(2)功能實(shí)現(xiàn):
如何實(shí)現(xiàn)多人在線聊天?
在服務(wù)器端開啟多線程來監(jiān)聽客戶端請求,每連接一個請求,就開啟一個線程。代碼實(shí)現(xiàn)如下:

server = new ServerSocket(port);
JOptionPane.showMessageDialog(null, "服務(wù)器登陸成功!");
list = new ArrayList<String>();
map  = new HashMap<String, Socket>();
while(true){ 
        socket = server.accept();
        Thread thread = new Thread(new ThreadSocket(socket));
        thread.start();
}

開啟服務(wù)器,監(jiān)聽端口 port ,每接受一個請求,開啟一個 Thread ,用戶登錄成功后將用戶名存儲在 List 集合中,同時將該套接字 socket 存在 map 集合中。

服務(wù)器如何判斷用戶名同名?
每一個用戶在登陸時,在 List 集合中檢查是否同名,沒有就登陸成功,同時將新用戶添加到 List 集合中。

客戶如何進(jìn)行交互?
基本實(shí)現(xiàn)是:客戶將消息發(fā)給服務(wù)器,服務(wù)器根據(jù) map 集合將消息再轉(zhuǎn)發(fā)給其他所有用戶。代碼實(shí)現(xiàn)如下:

Set keyset = Server.map.keySet();
Iterator it = keyset.iterator();
while(it.hasNext()){
    String name = (String) it.next();
    if(!name.equals(userName)){
    Socket clientSocket= Server.map.get(name);
    sendToClient(clientSocket,message);
    }
}

客戶端如何接發(fā)消息?
客戶端設(shè)置兩個線程,一個接受消息,一個發(fā)送消息。

如何動態(tài)顯示在線用戶?
服務(wù)器根據(jù) List 集合中存貯的名單發(fā)給所有客戶,客戶端接受后,通過 List Swing組件顯示。每次登陸新用戶或者用戶下線,服務(wù)器端會在 List 集合動態(tài)增減,從而動態(tài)顯示在線用戶。

3、實(shí)驗演示:
如下圖:

GIF.gif

四、實(shí)驗總結(jié):

1、java語言中,加深了面向?qū)ο缶幊痰睦斫猓由顚Τ橄笠约肮δ芊纸馑枷氲倪\(yùn)用。
2、加強(qiáng)了java中GUI圖形化開發(fā)中各種組件的運(yùn)用,以及java中多線程編程運(yùn)用。
3、加強(qiáng)鍛煉了網(wǎng)絡(luò)編程基礎(chǔ)技術(shù),加深了對TCP協(xié)議的理解,鍛煉自身的編程能力以及獨(dú)立解決問題的實(shí)踐能力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • demo獲取: demo地址[https://github.com/a67c/ezsocket]下載后再packa...
    進(jìn)擊的程序茗閱讀 5,503評論 2 25
  • 本文參與#漫步青春#征文活動,作者:某某,本人承諾,文章內(nèi)容為原創(chuàng),且未在其他平臺發(fā)布 題目 正文
    惘然咻咻咻閱讀 261評論 0 0
  • 年少時候的夢想 青春時期的愛戀 一起長大的朋友 經(jīng)不住 時間的摧殘 有些夢想不再想 有些感情隨風(fēng)逝 只有朋友 依然...
    孟德三笑閱讀 285評論 0 8

友情鏈接更多精彩內(nèi)容