這是幾年前,新浪的一個面試題~要求是3天之内實作~
通過TCP 協定,建立一個伺服器端。
通過配置伺服器端的IP和端口:
用戶端之間就可以互相通訊~
上線了全部線上使用者會收到你上線的通知。
下線了全部的線上使用者會收到你下線的通知!
可以私聊,可以群聊。
這是第一個版本~以後有空可以再增加功能~比如傳檔案啊~等等~
在伺服器端 用一個HashMap< userName,socket> 維護所有使用者相關的資訊,進而能夠保證和所有的使用者進行通訊。
用戶端的動作:
(1)連接配接(登入):發送userName 伺服器的對應動作:1)界面顯示,2)通知其他使用者關于你登入的資訊, 3)把其他線上使用者的userName通知目前使用者 4)開啟一個線程專門為目前線程服務
(2)退出(登出):
(3)發送消息
※※發送通訊内容之後,對方如何知道是幹什麼,通過消息協定來實作:
用戶端向伺服器發的消息格式設計:
指令關鍵字@#接收方@#消息内容@#發送方
1)連接配接:userName —-握手的線程serverSocket專門接收該消息,其它的由伺服器新開的與客戶進行通訊的socket來接收
2)退出:exit@#全部@#null@#userName
3)發送: on @# JList.getSelectedValue() @# tfdMsg.getText() @# tfdUserName.getText()
伺服器向用戶端發的消息格式設計:
指令關鍵字@#發送方@#消息内容
登入:
1) msg @#server @# 使用者[userName]登入了 (給用戶端顯示用的)
2) cmdAdd@#server @# userName (給用戶端維護線上使用者清單用的)
退出:
1) msg @#server @# 使用者[userName]退出了 (給用戶端顯示用的)
2) cmdRed@#server @# userName (給用戶端維護線上使用者清單用的)
發送:
msg @#消息發送者( msgs[3] ) @# 消息内容 (msgs[2])