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();

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java的Socket类和ServerSocket类来实现监听两个端口收到的消息。以下是一个简单的示例代码: ```java import java.net.ServerSocket; import java.net.Socket; import java.io.BufferedReader; import java.io.InputStreamReader; public class SocketListener { public static void main(String[] args) { int port1 = 8888; int port2 = 9999; try { ServerSocket serverSocket1 = new ServerSocket(port1); ServerSocket serverSocket2 = new ServerSocket(port2); while (true) { Socket socket1 = serverSocket1.accept(); Socket socket2 = serverSocket2.accept(); // 创建线程处理消息 new Thread(() -> { try { BufferedReader reader1 = new BufferedReader(new InputStreamReader(socket1.getInputStream())); BufferedReader reader2 = new BufferedReader(new InputStreamReader(socket2.getInputStream())); String message1 = reader1.readLine(); String message2 = reader2.readLine(); // 处理收到的消息 System.out.println("收到端口 " + port1 + " 的消息:" + message1); System.out.println("收到端口 " + port2 + " 的消息:" + message2); socket1.close(); socket2.close(); } catch (Exception e) { e.printStackTrace(); } }).start(); } } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个示例中,我们创建了两个ServerSocket对象分别监听端口8888和9999。然后,在一个无限循环中,我们使用accept()方法等待客户端的连接。一旦连接建立,我们创建一个新的线程来处理收到的消息。 在线程中,我们使用BufferedReader类从两个Socket对象的输入流中读取数据。然后,我们处理这些数据并输出到控制台。最后,我们关闭两个Socket对象。 当有多个客户端同时连接时,每个客户端都会创建一个新的线程处理消息。因此,我们可以同时监听多个端口并处理多个客户端的消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值