我有下面的代码,它创建了一个 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/