Java 利用两个端口和组播实现私聊群聊机制

 

机制:

每个用户启动两个Socket,一个MulticastSocket,一个DatagramSocket,MulticastSocket周期性的向组播地址发送在线信息,每个用户都加入到同一组播地址,实现在线确认功能,如果系统经过一段时间没用收到某个用户广播的在线信息,就从用户列表删除该用户。除此之外,这个MulticastSocket还负责向所有用户发送广播信息,实现群聊。

DatagramSocket 实现私聊,当用户收到其他用户的广播包时,就可以获得用户MulticastSocket对应的SocketAddress,这个地址是由用户ip+多播端口组成的,我们把这个端口加1,就变成了DatagramSocket监听的端口,就可以得到私聊消息数据报的目标地址了。

    (大家可以用一个User类,面向对象嘛,这个类封装了Name,图标,对应的SocketAddress以及lost表示失去联系的次数(没有收到该用户发出广播包的次数),以及与这个用户对应聊天对应的交谈窗口。)

用定时器实现周期发送在线确认数据报  用户登录,就启动一个定时器,这个定时器每20s进行一次广播在线消息的内容,通过这个广播的数据报,实现在线确认,统一利用30000端口监听广播的数据报,可根据广播包进行添加删除用户定时器(

import javax.swing.*;

import javax.swing.event.*;

javax.swing.Timer timer = new javax.swing.Timer(time

                  , 时间触发器);//表示每隔time ms播一次

timer.start();

 

你可能感兴趣的:(java)