熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

瘋狂Java講義:使用MulticastSocket實現多點廣播(2)

2013-11-23 19:39:16  來源: Java核心技術 

  下面將結合MulticastSocket和DatagramSocket開發一個簡單的局域網內的即時通信工具局域網內每個用戶啟動該工具後就可以看到該局域網內所有在線用戶他也會被其他用戶看到即看到如圖所示的窗口

  在圖的用戶列表中雙擊任意一個用戶即可啟動一個如圖所示的交談窗口

局域網聊天工具

與特定用戶交談

  如果雙擊圖所示用戶列表窗口中所有人列表項即可啟動一個與圖相似的交談窗口不同的是通過該窗口發送的消息將會被所有人看到

  該程序的實現思路是每個用戶都啟動個Socket一個MulticastSocket一個DatagramSocket

  其中MulticastSocket會周期性地向發送在線信息且所有用戶的MulticastSocket都會加入到這個多點廣播IP中這樣每個用戶都可以收到其他用戶廣播的在線信息如果系統經過一段時間沒有收到某個用戶廣播的在線信息則從用戶列表中刪除該用戶除此之外該MulticastSocket還用於向所有用戶發送廣播信息

  DatagramSocket主要用於發送私聊信息當用戶收到其他用戶廣播來的DatagramPacket時即可獲取該用戶MulticastSocket對應的SocketAddress這個SocketAddress將作為發送私聊信息的重要依據本程序讓MulticastSocket在端口監聽而DatagramSocket在端口監聽這樣程序就可以根據其他用戶廣播來的DatagramPacket得到他的DatagramSocket所在的地址

  本系統提供了一個UserInfo類該類封裝了用戶名圖標對應的SocketAddress以及該用戶對應的交談窗口失去聯系的次數等信息該類的代碼片段如下

  程序清單codes///LanTalk/UserInfojava

  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)

  {

  thisicon = icon;

  thisname = name;

  thisaddress = address;

  thislost = lost;

  }

  //此處省略了該類所有屬性的setter和getter方法

  …

  //使用address作為該用戶的標識所以根據address作為

  //重寫hashCode()和equals方法的標准

  public int hashCode()

  {

  return addresshashCode()

  }

  public boolean equals(Object obj)

  {

  if (obj != null && objgetClass()==UserInfoclass)

  {

  return ((UserInfo)obj)getAddress()equals(address)

  }

  return false;

  }

  }

       返回目錄瘋狂Java講義

       編輯推薦

       Java程序性能優化讓你的Java程序更快更穩定

       新手學Java 編程

       Java程序設計培訓視頻教程


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27257.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.