使用 Java 的 UNIX UDP 数据传输

UNIX UDP Data Transfer with Java

我想使用 java 创建 UDP OUTPUT=UPLOAD 流。我将从作为文件输入流打开的命名管道或连续文件中获取我的 INPUT=SOURCE 数据。

我的问题是,我可以在 Internet 上找到的所有 UDP 示例都只演示控制台会话。回显服务器等。

我正在尝试创建一种流式传输连续内容的方式,例如 audio/video,我不在乎丢失了什么,我将把它留给我的用户去关心,但是我的代码确实需要允许设置缓冲区大小和创建 UDP 连接。

理想情况下,一个好的示例将展示如何进行上传和下载模式连接(客户端模式和服务器模式)

您能否提供一些代码来执行此操作,或者在 Internet 上向我展示 link?我找不到 UDP 流 client/server 示例的事实很荒谬。使用UDP做console session很考验人的理智极限! 这甚至不应该被认为是可选的,更不用说有用了。 我需要的 client/server 代码必须与 GNU netcat 兼容。 (以确保正确的性能)

我已经和一个客户试过了:

byte[] buffer = new byte[udpPacketSize]; // 4096
int len;
while ((len = standardInput.read(buffer)) != -1) {
    udpSocket.send(new DatagramPacket(buffer, len, host, port));
}

但是当我停止发送数据并断开连接时,我无法重新连接以发送更多数据。我不确定这是否应该发生,因为 1) 我完全不在乎这里,以及 2) 当我在发送数据后断开连接时,GNU netcat 的远程实例不会像在 TCP 中那样退出模式。

HELP,我需要一个真正的网络系统工程师,告诉我如何在实际应用中实现UDP!

[还有人从互联网上删除所有这些垃圾,但让我们保持简单]

[进一步:请不要将库、包或 shell 命令作为解决方案进行响应。我必须能够在任何可能没有程序的嵌入式设备上执行,图书馆不会教我或其他任何人如何自己做任何事情。]

But when I stop sending data, and disconnect, I cannot reconnect to send more data.

就一台机器上的 netcat 到 netcat 而言,这就是 GNU Netcat UDP 模式的工作方式...

您的客户端需要在断开连接之前从服务器读取响应。因此,作为 "middle-man",您不必担心这一点,只要您可以将网络客户端的本地客户端连接到服务器的响应机制即可。

换句话说,您需要提供双向半双工连接(1:1 通信),因为您没有管理协议。

或者,您可以使用 different UDP server 而不是 Gnu Netcat。我已经测试了这个,它在没有 MUST-READ-REPLY-BUG 的情况下工作,实际上意味着,我的示例代码没有任何问题。必读回复功能与正确的 UDP 服务器实现无关(除非您必须连接与 Gnu Netcat 0.7.1 兼容的服务器)。

毫无价值的是,在没有驱动程序 (script/program) 的情况下使用 Gnu Netcat UDP 服务器模式不是很有用,特别是如果你想要一个连续的过程,因为你可以锁定你的远程客户端无法访问,直到进程重新生成。