【发布时间】:2019-11-22 23:50:28
【问题描述】:
目标
我正在尝试通过 UDP 从 Java 服务器向同一台机器上的 Python 客户端发送数据。
环境
- 设备/操作系统: Jetson nano 和 Ubuntu 18.04.3 LTS(仿生海狸)
- JavaC 版本: javac 11.0.4
-
Java 版本:
- openjdk 版本“11.0.4”2019-07-16
- OpenJDK 运行时环境(内部版本 11.0.4+11-post-Ubuntu-1ubuntu218.04.3)
- OpenJDK 64 位服务器 VM(内部版本 11.0.4+11-post-Ubuntu-1ubuntu218.04.3,混合模式)
问题
我可以将数据从 Python 测试服务器(参见下面的代码)发送到 Python 测试客户端就好了。但是,如果我尝试将数据从 Java 测试服务器发送到 Python 测试客户端,似乎什么都没有到达。 Java 服务器不会抛出异常。
用 Python 测试客户端(工作)
import socket
UDP_IP = "localhost"
UDP_PORT = 9999
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
print("listening...")
while True:
data, addr = sock.recvfrom(1024)
print("received message from: ", addr)
print("payload: ", data)
Python 中的测试服务器(工作)
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto("Hello World", ("localhost", 9999))
Java 中的测试服务器(不工作或无法访问 python 客户端)
import java.io.*;
import java.net.*;
public class TestSender {
public static void main(String[] args) {
try {
byte[] data = "Hello world".getBytes();
int port = 9999;
InetAddress address = InetAddress.getLocalHost();
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
System.out.println("Data sent");
socket.close();
} catch (Exception e) {
System.out.println("Something went wrong");
}
}
}
【问题讨论】:
-
您可以尝试将
InetAddress.getLocalHost()更改为InetAddress.getByName("localhost")。可能,getLocalHost 正在返回您的网络设备地址,而不是环回地址 (127.0.0.1)。 -
以上,返回的地址可能取决于您的系统,您可以打印出来查看。有关更多信息,请参阅此:stackoverflow.com/questions/2381316/…
-
不要绑定到本地主机。绑定到 0.0.0.0。
标签: java python sockets udp localhost