java - 从 stdin 读取并使用 UDP 发送,创建双向通信

标签 java sockets udp

我有下面的代码,它创建了一个 UDP 样式的套接字。我运行并编译了代码,它工作得很好。如果我随后使用“netcat -u”,我可以将消息从客户端发送到服务器,但反之则不行。所以我想要的以及我一直在尝试做的就是从标准输入中读取并打印它(所有这些都在第二个线程中运行)。使其成为双向通信。有人知道我需要修复什么吗?提前致谢。

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class NetcatUDP {

    public static void main(String[] args) throws IOException {

        int port = Integer.parseInt(args[0]);
        byte[] buffer = new byte[65536];

        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        DatagramSocket socket = new DatagramSocket(port);

        new Thread() {
            @Override
            public void run() {
                 // Read from stdin and send somehow?
            }
        }.start();

        while (true) {
            socket.receive(packet);
            System.out.println(new String(packet.getData()).trim());
        }
    }
}

最佳答案

UDP 是一种无连接协议(protocol),这意味着您可以使用单个套接字向任何人发送消息并从任何人接收消息。

对于您正在使用的简单示例,您实际上可以对两个端点使用相同的程序。除了从命令行读取本地端口号之外,还可以读取远程IP地址和端口。然后在您的线程中,您使用 Console.readLine() 从 stdin 读取数据,使用从控制台读取的行、远程 IP 和远程端口构造一个 DatagramPacket,并使用现有的 socket 发送它。

关于java - 从 stdin 读取并使用 UDP 发送,创建双向通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32549973/

相关文章:

java - XPath:帮助定位使用 HTMLUnit 抓取的 DOM 中的特定元素

windows - Windows CE上套接字连接的调整超时时间

php - curl 穿过已经打开的套接字

java - java.net.DatagramSocket 中对构造函数 "super(null)"的调用不明确?

Go net.DialUDP 自动选择环回接口(interface)

java - 工具栏菜单不再起作用

java - 使用 GSON 反序列化 JSON 对象数组

sockets - Node.JS WebSocket 和 Socket

c - 如何接收来自所有子网的 UDP 多播?

java - 在 hibernate 中映射复合外键