从 stdin 读取并使用 UDP 发送,创建双向通信
Reading from stdin and sending with UDP, creating two-way communication
我有下面的代码创建套接字 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 是一种无连接协议,这意味着您可以通过单个套接字向任何人发送消息并从任何人接收消息。
对于您使用的简单示例,您实际上可以对两个端点使用相同的程序。除了从命令行读取本地端口号外,还要读取远程 IP 地址和端口。然后在你的线程中,你使用 Console.readLine()
从 stdin 读取,用从控制台、远程 IP 和远程端口读取的行构造一个 DatagramPacket
,并用现有的 socket
发送它有。
我有下面的代码创建套接字 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 是一种无连接协议,这意味着您可以通过单个套接字向任何人发送消息并从任何人接收消息。
对于您使用的简单示例,您实际上可以对两个端点使用相同的程序。除了从命令行读取本地端口号外,还要读取远程 IP 地址和端口。然后在你的线程中,你使用 Console.readLine()
从 stdin 读取,用从控制台、远程 IP 和远程端口读取的行构造一个 DatagramPacket
,并用现有的 socket
发送它有。