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