當前位置:編程學習大全網 - 編程語言 - 瘋狂Java講義:使用MulticastSocket實現多點廣播(2)

瘋狂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 編程

lishixinzhi/Article/program/Java/hx/201311/27257

  • 上一篇:什麽是晶體管?二極管,三極管是不是就是晶體管?
  • 下一篇:excel中,當操作數發生變化時,公式的運算結果( )(2分) 會發生改變 不會發生改
  • copyright 2024編程學習大全網