问题标签 [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 投票
1 回答
555 浏览

java - DatagramPacket 接收的附加字节

我有一个我第一次看到的问题,我正在使用 java DatagramSocket (s) 在我的应用程序中发送和接收数据。

这就是我发送数据的方式:

现在,当我发送 byte[] 缓冲区时,它的大小为 275。但是当我在接收应用程序上收到数据包并从 receiverPacket 获取 byte[] 时,如下所示:

我发现接收到的字节数为 278 个字节,即额外的 3 个字节。

这似乎不是一个大问题,但实际上对我来说,请知道为什么会发生这种情况,以及如何解决它,任何合乎逻辑的解释都会有所帮助。

谢谢

0 投票
2 回答
1442 浏览

java - 通过数据报套接字发送对象java

我正在实现这个示例,因为我想向多个客户端广播。在尝试使用套接字发送另一个对象(已被序列化)时,我收到一个错误,指出套接字(在示例中)无法通过它发送对象。数据报套接字也不能发送/接收对象吗?

0 投票
1 回答
656 浏览

java - NIO 通道上的写入和发送有什么区别?

我正在使用 Java NIO 构建一个 UDP 通信系统,并通过 javadoc 浏览 API,我注意到通道有一个 write 原语和一个 send 原语。我已经对两者进行了原型设计并进行了尝试,但似乎没有任何变化,因为它们都提供了缓冲区。同样,我看的书似乎也无助于解开这个疑惑,于是我想问:channel.write和channel.send有什么区别?

提前致谢。

0 投票
1 回答
1925 浏览

android - 在android中接收UDP数据包

我正在为 android 开发 P2P 聊天/共享应用程序。以下代码用于接收 UDP 数据包,但仅接收并显示第一个消息/数据包。(发送代码没有问题。) 不显示后续聊天消息。chathistory.setText(new String.... 执行后while循环似乎退出了。 eg:chathistory.setText("test"); 没有执行。谁能指出错误?没有抛出异常。

0 投票
5 回答
1075 浏览

c - 这个数据报套接字有什么问题?

我在这里有一些代码可以查询Steam主服务器以获取游戏服务器的 IP 列表:

(注意一秒钟timeout。)

除了一些奇怪的通信行为之外,这很好。它似乎要么第一次工作,要么一次又一次地不断超时,而且永远不会成功。

修复的方法是简单地再次运行它,它可能会起作用,但我不明白它任意不起作用的原因。

任何输入将不胜感激!

0 投票
1 回答
17081 浏览

java - 数据报套接字上的 setSotimeout

服务器就像一个回声服务器。客户端向服务器发送 10 个数据包(间隔 1 秒)

当客户端从服务器接收到数据包时,有时数据包会丢失。

所以客户端必须等待最多一秒钟才能让数据包到达。如果数据包在 1 秒内未到达,则客户端应继续发送其他数据包。

我将如何使用 .setSoTimeout 来实现这一目标?

代码:

}

0 投票
2 回答
2892 浏览

android - Android - 发送 DatagramSocket 最大缓冲区大小

我有一个通过 UDP 发送数据的应用程序。我试图找出最大/最佳发送缓冲区大小是多少。我已经成功发送了一个 2k 包,但是更大的包是个问题。我尝试使用 getSendBufferSize 来查看发送缓冲区大小。它返回 110592 字节。当我尝试发送任何接近它的东西时,我没有收到错误,但数据不会到达服务器。

我怎么知道“允许的”发送缓冲区大小是多少?

谢谢。

0 投票
3 回答
1631 浏览

c - 是否可以用高级语言查看数据报包?

我目前正在尝试将处理数据报(udp)数据包的 ac 程序移植到一些更高级别的语言。由于数据包可以是可变大小的,它们以一个整数开始,说明它们的大小。在 c 中,我使用 MSG_PEEK 标志调用 recv 以首先仅接收此值,然后分配一个合适的缓冲区并读取数据包的其余部分。代码(简化)如下所示:

我想避免看似普遍的做法来分配一个巨大的缓冲区,并希望不会有更大的数据包到达。那么在 python 或 java 等高级语言中,是否可以预先查看数据报或确定其完整长度?

0 投票
2 回答
1372 浏览

java - 数据报是否总是被完整接收?

大多数数据报接收函数,如 c 的 recv 或 read、javas DatagramPacket 类或 pythons SocketServer,都包括找出接收数据量的可能性。

C:

爪哇:

Python:

这些可靠吗?或者是否有可能只收到部分消息,例如由于数据包碎片或网络延迟?
换句话说:当我通过 udp 发送一个可变长度的数据块并在另一端接收它时,这些数量值是否完全等于原始块的大小?

编辑:
ninjalj 提出了一个很好的观点,我想把它包括在这里。当接收函数被中断时会发生什么,例如被信号中断?当两个线程同时尝试从同一个套接字接收时会发生什么?

0 投票
1 回答
356 浏览

java - 如何使用 UDP DatagramSocket 将 AIR 应用程序连接到 Java 服务器?

我正在尝试使用 UDP DatagramSocket 将 Flash AIR 应用程序与 Java 服务器连接,但我不知道该怎么做。有人可以帮忙吗?