首页 > 解决方案 > 如何接收从java程序发送的数据包

问题描述

我有以下 Java 代码:

DatagramSocket s = new DatagramSocket();   
DatagramPacket p = new DatagramPacket(data, data.length, address, port);
s.send(p);                               
s.close(); 

因此,这会将 a 发送DatagramPacket到端口的地址。如何使用一些 Linux 脚本在地址端接收数据包,或者在另一端不编写任何类似的 java 代码?

标签: javapythonbashsocketsdatagram

解决方案


任何外壳(不仅仅是bash)的一种方法是使用socat

socat -u udp-recvfrom:PORT stdout

将侦听发送到给定端口的一个数据包,回显它,然后退出。udp-recv会做同样的事情,但不是在一个数据包后退出,而是永远循环。如果要强制使用 IPv4 或 IPv6,请分别使用udp4-XXXand或or选项(默认为 IPv4)。udp6-XXX-4-6

一些有用的目的地而不是stdout:create:FILENAME会将数据报写入给定文件,覆盖现有内容(Sosocat -u udp-recvfrom:PORT stdout > FILENAMEsocat -u udp-recvfrom:PORT create:FILENAME是等效的),并将exec:COMMANDLINE以数据报作为其标准输入运行给定命令。有关更多信息,请参阅文档。


推荐阅读