- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一些应该从 MulticastSocket 接收数据的代码。由于某种原因,套接字永远不会接收。我已将其分解为下面的代码。我发送了几个数据包,但这些数据包从未收到。我可以确认数据包已发送,因为wireshark 检测到了它们。此外,我从不同的机器(同一网络)发送了数据包,但仍然没有收到数据包。我已确认防火墙已关闭,有什么想法吗?
@Test
public void test_testrun() {
InetAddress addr;
try {
addr = InetAddress.getByName("234.67.67.67");
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
int port = 5555;
byte[] data = "1234567890".getBytes();
final DatagramPacket sendPacket = new DatagramPacket(
data,
data.length,
addr,
port
);
// initialize the server.
MulticastSocket s;
try {
s = new MulticastSocket(port);
s.joinGroup(addr);
s.setLoopbackMode(true);
} catch (IOException e) {
throw new RuntimeException(e);
}
// send every 100 ms.
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0 ; i < 5; ++i) {
try {
System.out.println("Sending");
new MulticastSocket().send(sendPacket);
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}).start();
// receive the packet.
DatagramPacket packet = new DatagramPacket(new byte[data.length], data.length);
try {
System.out.println("Listening");
s.receive(packet);
} catch (IOException e) {
s.close();
throw new RuntimeException(e);
}
s.close();
Assert.assertTrue(Arrays.equals(data, packet.getData()));
System.out.println("DATA: "+ new String(packet.getData()));
}
更新:我忘了包含输出..
听力发送发送发送发送正在发送
此时,它将只是等待接收某些内容。
最佳答案
一个简单的事情可能是如果您位于路由器后面。您的路由器可能正在接收传入请求,但不知道将其发送到哪里。这需要您将端口 5555 转发到正确的内部 IP,即运行服务器程序的计算机。
检查此问题的一种方法是使用 IP 127.0.0.1
或 localhost
在本地运行客户端和服务器。
关于Java MulticastSocket 发送但不接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22543473/
我的服务器当前能够发送和接收多播数据包。我还添加了接收和发送单播数据包的功能。因此,我创建了“DatagramSocket uniRecv”和“DatagramSocket uniSend”来模仿多播
我正在使用多播编写一个java聊天应用程序。客户端可以在它们之间进行通信,但它们也可以向服务器发送预定义的消息,服务器始终对相应的预定义消息有相同的答案。 客户端和服务器端都可以接收和发送消息。它们都
我正在尝试让多播套接字在“服务器”应用程序上工作,该应用程序将向一堆 Android 手机发送信息。负责设置套接字并发送一些数据的代码片段如下: private MulticastSocket
我正在编写一个通过 MulticastSocket 进行通信的 Android 应用程序。它基本上工作正常,但我遇到了一个奇怪的错误:每当连接中断并恢复时(例如设备短暂失去 WiFi 连接),应用程序
这个问题已经有答案了: 奥 git _a (1 个回答) 已关闭 9 年前。 我编写了一些应该从 MulticastSocket 接收数据的代码。由于某种原因,套接字永远不会接收。我已将其分解为下面的
我正在尝试在我的 PC(Ubuntu,客户端)和手机(Android,服务器)之间创建简单的多播通信。 单播/TCP 连接工作没有任何问题,定义的端口 (37659) 在 PC 和手机上均打开。尝试使
我正在研究多人游戏中服务器-客户端通信的结构。 我得出的结论是,UDP 是最佳选择,因为它采用“一劳永逸”的使用方式,即使数据包丢失也不会阻止应用程序。我还将使用 TCP 发送需要可靠性的数据包,例如
我正在尝试订阅一个特定的市场数据提要,通过 FAST 协议(protocol)以多播方式分发。在Java中,有MulticastSocket,也有DatagramChannel支持多播。 我使用的
尝试调用 MulticastSocket 上的 joinGroup(addr) 时出现 SocketException。这只发生在我们设置为在机器启动时自动启动我们的应用程序的 Windows 机器上
我在 Android 中有一个应用程序使用 MulticastSocket 进行通信。我想在 J2ME 中编写类似的应用程序,使用 MulticastSocket 通过 WiFi 与 Android
我正在尝试在 Java 上执行一个简单的多播套接字示例。 MulticastSocket s = new MulticastSocket(6789); InetAddress group = In
我有 2 个线程想要调用: multicastSocket.send(dP1) 和 multicastSocket.send(dP2) 分别,其中dP1和dP2是不同的DatagramPacket对象
我有两个线程。第一个在循环中发送带有 MulticastSocket 的数据报;第二个线程在循环中使用相同的 MulticastSocket 实例接收数据报。 它似乎工作正常,但我仍然有疑问。 这两个
我开发客户端-服务器应用程序,实时工作。服务器和客户端通过小消息交换,所以我选择 UDP 作为我的体系结构(正如网络中许多文章所建议的那样)。使用默认 java 的 DatagramSocket/Da
我有一些线程在同一个 MulticastSocket 上写入(取决于调度,可能会发生多于一个线程同时在 MulticastSocket 上写入)。我是否必须通过使用某种形式的锁定让他们在每个计时器上写
我正在尝试在创建 MulticastSocket 后加入多播组。 做类似的事情: MulticastSocket mySocket = new MulticastSocket(4444); mySoc
当一个服务器向多个客户端广播时,哪个实现更快/更有效:MulticastSocket 或 DatagramSocket? 也请大家讨论一下,谢谢! 传递的消息涉及字符串和 float 。 最佳答案 决
我正在推理我的应用程序中的多播套接字线程安全性。首先,我有多个线程共享同一个多播套接字实例,该多播套接字用于加入同一端口上的不同组。这是我的问题: 我是否必须同步对 joinGroup() 和 lea
我可能对此处的绑定(bind)一词有根本的误解,但我对 MulticastSocket 的用法感到困惑。它是构造函数。他们不会做我理解他们应该做的事情,因此任何能帮助我消除误解的人都将不胜感激。 首先
我开始使用 MulticastSocket 编写代码,尝试制作一个简单的应用程序,使用客户端和服务器来发送消息。 我为服务器准备的代码: import java.io.IOException;
我是一名优秀的程序员,十分优秀!