我试图编写一个简单的程序来使用 py4j 在 python 和 java 之间建立连接。我写了以下两行,希望一切都能运行,因为我没有进行任何更改
from py4j.java_gateway import JavaGateway, GatewayParameters
gateway = JavaGateway(gateway_parameters=GatewayParameters(port=25335))
random = gateway.jvm.java.util.Random()
这导致了以下错误
py4j.protocol.Py4JNetworkError:尝试连接到Java服务器时发生错误(127.0.0.1:25335)
我环顾四周,发现如果 java 正在侦听不同的端口,则可能会发生这种情况。所以我写了一个 for 块来看看会发生什么
for i in range(65535+1):
try:
gateway = JavaGateway(gateway_parameters=GatewayParameters(port=i))
random = gateway.jvm.java.util.Random()
print("passed port num", str(i))
except:
pass
上面的块没有产生任何结果。所有端口均无法连接。我不知道我哪里出了问题。
如何找到java端正在使用的端口号?
我正在使用 py4j 版本 0.10.7 和 python 3.6.0
EDIT
我使用了与中使用的相同的java代码py4j教程 https://www.py4j.org/getting_started.html
我有一个名为java_stack.java
and py4j_gs.java
。两者都在同一目录中。我从终端调用“java py4j_gs.java”。这是两个文件的内容
java_stack.java
package py4j.examples;
import py4j.GatewayServer;
public class StackEntryPoint {
private Stack stack;
public StackEntryPoint() {
stack = new Stack();
stack.push("Initial Item");
}
public Stack getStack() {
return stack;
}
public static void main(String[] args) {
GatewayServer gatewayServer = new GatewayServer(new StackEntryPoint());
gatewayServer.start();
System.out.println("Gateway Server Started");
}
}
py4j_gs.java
package py4j.examples;
import py4j.GatewayServer;
public class StackEntryPoint {
private Stack stack;
public StackEntryPoint() {
stack = new Stack();
stack.push("Initial Item");
}
public Stack getStack() {
return stack;
}
public static void main(String[] args) {
GatewayServer gatewayServer = new GatewayServer(new StackEntryPoint());
gatewayServer.start();
System.out.println("Gateway Server Started");
}
}