使用MulticastSocket实现多点广播(2)
来源:互联网 发布:淘宝狐狸美妆有假货吗 编辑:程序博客网 时间:2024/04/29 19:23
原文地址:http://book.51cto.com/art/200809/89226.htm
下面将结合MulticastSocket和DatagramSocket开发一个简单的局域网内的即时通信工具,局域网内每个用户启动该工具后,就可以看到该局域网内所有在线用户,他也会被其他用户看到。即看到如图17.8所示的窗口:
在图17.8的用户列表中双击任意一个用户,即可启动一个如图17.9所示的交谈窗口:
图17.8 局域网聊天工具图17.9 与特定用户交谈
如果双击图17.8所示用户列表窗口中“所有人”列表项,即可启动一个与图17.9相似的交谈窗口,不同的是通过该窗口发送的消息将会被所有人看到。
该程序的实现思路是每个用户都启动2个Socket,一个MulticastSocket,一个DatagramSocket。
其中MulticastSocket会周期性地向230.0.0.1发送在线信息,且所有用户的MulticastSocket都会加入到230.0.0.1这个多点广播IP中,这样每个用户都可以收到其他用户广播的在线信息,如果系统经过一段时间没有收到某个用户广播的在线信息,则从用户列表中删除该用户。除此之外,该MulticastSocket还用于向所有用户发送广播信息。
DatagramSocket主要用于发送私聊信息,当用户收到其他用户广播来的DatagramPacket时,即可获取该用户MulticastSocket对应的SocketAddress,这个SocketAddress将作为发送私聊信息的重要依据:本程序让MulticastSocket在30000端口监听,而DatagramSocket在30001端口监听,这样程序就可以根据其他用户广播来的DatagramPacket得到他的DatagramSocket所在的地址。
本系统提供了一个UserInfo类,该类封装了用户名、图标、对应的SocketAddress以及该用户对应的交谈窗口、失去联系的次数等信息,该类的代码片段如下:
程序清单:codes/17/17-4/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;}}
- 使用MulticastSocket实现多点广播(2)
- 使用MulticastSocket实现多点广播(3)
- 使用MulticastSocket实现多点广播(4)
- 使用MulticastSocket实现多点广播
- 使用MulticastSocket实现多点广播
- 使用MulticastSocket实现多点广播
- 使用MulticastSocket实现多点广播(实现多人聊天室)
- Java使用MulticastSocket实现多点广播
- 使用MulticastSocket实现多点广播(1)
- Java使用MulticastSocket实现多点广播
- Android使用MulticastSocket实现多点广播图片
- MulticastSocket 多点广播
- 使用MulticastSocket实现组播
- WebSphere MQ7 实现多点广播
- WebSphere MQ7 实现多点广播
- Java网络编程(四) 通过MulticastSocket实现广播
- MulticastSocket 广播消息
- MulticastSocket 广播学习
- jni GetMethodID 多个参数
- sql之left join、right join、inner join的区别
- 使用MulticastSocket实现多点广播(1)
- linux vi常用命令
- android ViewPager
- 使用MulticastSocket实现多点广播(2)
- unity 播放视频
- 黑马程序员--java基础
- 好端端的项目重新运行的时候却不行了!!!已解决
- poj_3321 Apple Tree
- c#读取文件路径并保存在textBox2中
- Android开发 EditView在用户输入数据后自动添加默认数据
- 3.《程序猿扯淡系列》约会的艺术--教你如何逆袭
- DAVINCI DM36x 之——RBL→UBL→U-BOOT内存NAND与DDR交互数据变换图