问题标签 [datagram]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1621 浏览

java - 使用 Java 套接字处理无法访问的 UDP 端口

我正在使用 Java DatagramSocket 将数据流式传输到多个不同的客户端。当我自己处理当前注册的客户端列表时,我只将套接字绑定到服务器端口,而不连接到任何特定的客户端。

但是,由于不使用 connect(),我失去了 DatagramSocket 对不可达端口的 ICMP 通知做出反应的能力,如果其中一个客户端死亡并且没有机会正确地向服务器注销,则会发送这些通知。

有什么办法可以恢复这种行为?我曾想过每个客户端使用一个 DatagramSocket,但这似乎不可行,因为它们都必须绑定到服务器上的同一个端口(据我所知,在 UDP 中是不可能的)。

我知道不能保证我的服务器会看到 ICMP 消息,我将实施某种超时机制来处理它,但是对 ICMP 消息做出反应将允许我立即停止传输到任何没有的主机没有客户端正在运行,这对流媒体客户端用户来说似乎是一件好事。

0 投票
2 回答
249 浏览

java-me - 在J2ME中通过DatagramConnection通过电缆发送数据是否正确?

我想在手机和电脑之间使用J2ME发送数据。两台机器通过电话线连接:没有Wi-Fi,没有http连接,没有互联网。DatagramConnection那么当手机的数据线插入电脑的USB口时,使用J2ME向电脑发送数据到底是对还是错呢?

0 投票
4 回答
9522 浏览

java - 如何摆脱缓冲区的剩余空间?

我有一个使用数据报套接字交换消息的服务器客户端应用程序。我最初将缓冲区大小设置为 1024 字节,因为我不知道消息的长度。当我发送小于 1024 字节的内容时,我的字符串的其余部分显示为一些奇怪的字符(空字符或者我不确定它们是如何被调用的)。这是一个屏幕: 字符串缓冲区空字符

客户端代码: byte[] buf = ("This is another packet.\n").getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf.length, inetAddress, serverport); socket.send(packet)

服务器代码: byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet);

0 投票
3 回答
1915 浏览

java - DatagramSocket 暂时停止接收数据包(Java)

我在 Lua 中为游戏编写了一个插件,该插件通过 UDP 数据包(512 字节)将玩家信息发送到远程服务器,该服务器从数据包中读取数据并将所有玩家信息聚合到一个 xml 文件中(然后可以在所有玩家都可以上网,这样他们就可以看到彼此的当前状态)。

我已经使用 DatagramSocket 用 Ja​​va 对服务器进行了编程来处理传入的数据包,但是我注意到了一些奇怪的行为。一段时间后,DatagramSocket 似乎暂时停止接受连接约 10-12 秒,然后再次恢复正常行为(我可以看到没有抛出异常)。客户端发送数据包的频率与此行为发生的速度之间肯定存在关系。如果我增加客户端的更新频率,DatagramSocket 将更快地“失败”。

值得一提的是,收到的每个数据包都会产生一个线程来处理数据包中的数据。如果它有所作为,我将在 linux 上运行服务器!

有谁知道是什么导致这种行为发生?

安德鲁

0 投票
2 回答
691 浏览

java - 通过数据报套接字进行网络发现:多播

我正在实现服务器侦听网络中任何活动客户端的示例。

我正在为服务器使用数据报套接字来进行多播,并使用客户端来响应服务器。

}

在客户端:

}

在上面的例子中,客户端必须先知道服务器的 IP(硬代码)。如何修改服务器端的代码,以便服务器将其 IP 发送给客户端并由客户端响应?

我可以使用套接字来做到这一点,但是可以使用数据报套接字吗?

谢谢!

0 投票
2 回答
3478 浏览

c# - 下一个排队数据报的大小 - UDP

我正在使用System.Net.Sockets Socket类来接收 UDP 数据报。我想知道收到的数据报的确切长度,以便检查数据报的有效性。

Socket.Receive(Byte())方法文档说:

如果您使用的是无连接 Socket,Receive 将从您在 Connect 方法中指定的目标地址读取第一个排队的数据报。如果您收到的数据报大于缓冲区参数的大小,缓冲区将被消息的第一部分填充,多余的数据将丢失并抛出 SocketException。

Socket.Available属性给出了可供读取的总字节数,这是对所有排队数据报的大小的总和。

有没有办法可以找出下一个数据报的大小?

0 投票
1 回答
4148 浏览

java - DatagramSocket:文件发送,客户端收不到图片文件

我正在尝试使用 DatagramSocket 发送一堆文件。但是有一个我无法弄清楚的问题。传输图像文件以外的文件很顺利,但是在发送图像文件时,尽管服务器发送了文件,但客户端却卡在了接收状态。这是我的客户端和服务器端代码块:

服务器:

客户:

如果能给我关于我的代码、性能或错误使用提示的提示,我也很感激。
提前致谢。

更新:

在发送文件本身的 for 循环中添加一点睡眠时间后,现在我可以完成发送文件,但我得到的所有图像文件都已损坏。

0 投票
1 回答
764 浏览

sockets - 读取 UDP 套接字:记录或流

假设 UDP 发送方多次执行 sendto:

接收器在数据可用时执行以下代码:

现在,如果调用 recvfrom 时所有数据 (100+200+300) 都可用,是否有可能通过一次 recvfrom 调用或多个不可预测大小的 recvfrom 调用读取数据?或者它总是被发送时相同的部分接收:100、200、300?

要编写 100% 正确的接收器代码,我应该实现一种流解析逻辑,还是数据记录读取逻辑?

对于这个问题,我假设数据没有丢失并且数据包顺序没有改变,但是,在一般情况下,这对于 UDP 套接字是不正确的。

0 投票
6 回答
21738 浏览

java - 数据报包到字符串

尝试将收到的 DatagramPacket 转换为字符串,但我有一个小问题。不知道最好的方法是什么。

我将接收到的数据大多是未知长度的,因此我在接收端设置了一些缓冲区 [1024]。问题是,假设我发送了字符串“abc”并在我的接收方执行以下操作......

我得到以下输出: abc[][][][]][][][]..... 一直到缓冲区长度。我猜最后所有的垃圾/空值都应该被忽略,所以我一定做错了。”我知道 buffer.length 是问题,因为如果我将它更改为 3(对于这个例子),我的出来就好了。

谢谢。

0 投票
4 回答
37562 浏览

java - 需要在 Java 中发送 UDP 数据包并接收响应

我必须发送一个 UDP 数据包并从 UDP 服务器获得响应。我虽然 UDP 与 Java 中的 java.net.DatagramPacket 类似,但 DatagramPacket 的文档似乎是您发送了一个数据包但没有得到任何返回,这是正确的使用方法还是我应该使用 java。网络套接字