A. 瘋狂java講義:使用MulticastSocket實現多點廣播(2)
下面將結合MulticastSocket和DatagramSocket開發一個簡單的區域網內的即時通信工具 區域網內每個用戶啟動該工具後 就可以看到該區域網內所有在線用戶 他也會被其他用戶看到 即看到如圖 所示的窗口
在圖 的用戶列表中雙擊任意一個用戶 即可啟動一個如圖 所示的交談窗口
圖 區域網聊天工具
圖 與特定用戶交談
如果雙擊圖 所示用戶列表窗口中 所有人 列表項 即可啟動一個與圖 相似的交談窗口 不同的是通過該窗口發送的消息將會被所有人看到
該程序的實現思路是每個用戶都啟動 個Socket 一個MulticastSocket 一個DatagramSocket
其中MulticastSocket會周期性地向 發送在線信息 且所有用戶的MulticastSocket都會加入到 這個多點廣播IP中 這樣每個用戶都可以收到其他用戶廣播的在線信息 如果系統經過一段時間沒有收到某個用戶廣播的在線信息 則從用戶列表中刪除該用戶 除此之外 該MulticastSocket還用於向所有用戶發送廣播信息
DatagramSocket主要用於發送私聊信息 當用戶收到其他用戶廣播來的DatagramPacket時 即可獲取該用戶MulticastSocket對應的SocketAddress 這個SocketAddress將作為發送私聊信息的重要依據 本程序讓MulticastSocket在 埠監聽 而DatagramSocket在 埠監聽 這樣程序就可以根據其他用戶廣播來的DatagramPacket得到他的DatagramSocket所在的地址
本系統提供了一個UserInfo類 該類封裝了用戶名 圖標 對應的SocketAddress以及該用戶對應的交談窗口 失去聯系的次數等信息 該類的代碼片段如下
程序清單 codes/ / /LanTalk/UserInfo java
public class UserInfo
{
//該用戶的圖標
private String icon;
//該用戶的名字
private String name;
//該用戶的MulitcastSocket所在的IP和埠
private SocketAddress address;
//該用戶失去聯系的次數
private int lost;
//該用戶對應的交談窗口
private ChatFrame chatFrame;
public UserInfo(){}
//有參數的構造器
public UserInfo(String icon String name SocketAddress address int lost)
{
this icon = icon;
this name = name;
this address = address;
this lost = lost;
}
//此處省略了該類所有屬性的setter和getter方法
…
//使用address作為該用戶的標識 所以根據address作為
//重寫hashCode()和equals方法的標准
public int hashCode()
{
return address hashCode()
}
public boolean equals(Object obj)
{
if (obj != null && obj getClass()==UserInfo class)
{
return ((UserInfo)obj) getAddress() equals(address)
}
return false;
}
}
返回目錄 瘋狂Java講義
編輯推薦
Java程序性能優化 讓你的Java程序更快 更穩定
新手學Java 編程
lishixin/Article/program/Java/hx/201311/27257
B. 瘋狂Java講義的源碼如何導入eclipse運行
Java項目的源代碼通過一下四部完成導入到eclipse
1、單擊eclipse的file菜單 ,選擇 import project from file system
2、在彈出的窗口單擊 diretory 按鈕 選擇Java源代碼文件系統所在的目錄
3、單擊「選擇文件夾 」完成將java源代碼導入到eclispe系統
你明白了嗎?
C. JAVA零基礎者應該看什麼書比較好
java 全棧工程師
一個java零基礎自學網站分享-我的文章-知乎https://zhuanlan.hu.com/p/47785978