java - 使用java向同一路由器下的多个主机发送数据包
问题描述
我们是一群中学的孩子,他们试图用java实现一个程序,它就像网络下的聊天服务器,我们在网络外有一个服务器,每个客户端都在学校的网络内,我们想知道怎么能我们从服务器向网络中的每个客户端发送 1 个数据包,因为在该路由器后面有许多计算机(客户端)。
解决方案
你在这里有两个选项:
- 广播
- 多播
我更喜欢multicast
它,因为它更有效并且不会干扰网络中的每台计算机。
它是如何工作的?
多播是在一次传输中向一组听众广播消息的能力。
多播的一个很好的类比是广播,成千上万的人可以收听一个广播事件并收听相同的消息,计算机在向听众发送消息时可以做类似的事情。
一组客户端机器可以调谐到相同的地址和端口号,以接收服务器广播到该地址和端口的消息。
Java 语言通过数据报消息传递提供多播功能。数据报是独立的、无保证的消息,可以通过网络传递给客户端。(无保证意味着到达、到达时间和内容是不可预测的。)与通过 TCP 发送的消息不同,发送数据报是一个非阻塞事件,发送者不会收到消息的接收通知。
数据报是使用用户数据报协议 (UDP) 而不是 TCP 发送的。只要消息的顺序、可靠性和数据完整性不是关键任务,通过 UDP 发送多播消息的能力是 TCP 的优势之一。
推荐阅读
- r - 拆分列
- android - 2 TextViews 在约束布局中相互重叠
- app-store - 传输器错误“尝试调用请求的方法 validateAssets 时发生错误。(1272)”
- azure - 由于自签名 CA,访问 Azure 密钥保管库错误
- node.js - 开发阶段的Nestjs应用结构
- github - 如何在 Visual Studio Code 中查看来自 GitHub 的已关闭 PR
- c# - Entity Framework Core 计数表和记录 Code-First Approach (MySQL)
- ios - UITableViewCell 中的 UIImageView 不改变图像
- java - 如何使用查询在 android 中获取被阻止的 SMS 或 MMS?
- elasticsearch - 格式为 YYYY/MM/DD HH:MM:SS 的时间戳的 Grok 模式