0

我正在尝试通过 CArtAgO 基础设施远程连接到 JaCaMo 应用程序。

在服务器中,我的 jcm 文件是这样的:

mas testsvr {
    agent bob
    workspace world
    platform: cartago(infrastructure)
    class-path: lib                      // java class path
    asl-path:   src/agt, src/agt/inc     // agent source path
}

一个客户端应用程序是这样的:

mas testclient {
    agent alice
    platform: cartago()
    node n1 running @ 10.0.0.14
    class-path: lib                      // java class path
    asl-path:   src/agt, src/agt/inc     // agent source path
}

当我运行服务器监听时,我得到以下输出:

CArtAgO Http Server running on http://127.0.1.1:3273
Jason Http Server running on http://127.0.1.1:3272
Looking for rmi://10.0.0.11/cartago_node
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: 
    java.net.ConnectException: Connection refused
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
    at com.sun.proxy.$Proxy6.join(Unknown Source)
    at cartago.infrastructure.rmi.CartagoInfrastructureLayer.joinRemoteWorkspace(CartagoInfrastructureLayer.java:62)
    at cartago.CartagoService.joinRemoteWorkspace(CartagoService.java:372)
    at cartago.NodeArtifact.joinRemoteWorkspace(NodeArtifact.java:99)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at cartago.ArtifactOpMethod.exec(ArtifactOpMethod.java:39)
    at cartago.Artifact.doOperation(Artifact.java:407)
    at cartago.Artifact.access$200(Artifact.java:32)
    at cartago.Artifact$ArtifactAdapter.doOperation(Artifact.java:1275)
    at cartago.WorkspaceKernel.serveOperation(WorkspaceKernel.java:1136)
    at cartago.WorkspaceKernel.access$000(WorkspaceKernel.java:48)
    at cartago.WorkspaceKernel$EnvironmentController.run(WorkspaceKernel.java:1477)

当我在没有服务器监听的情况下运行时,输出是:

CArtAgO Http Server running on http://127.0.1.1:3273
Jason Http Server running on http://127.0.1.1:3272
java.rmi.ConnectException: Connection refused to host: 10.0.0.11; nested exception is: 
    java.net.ConnectException: Connection refused
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at java.rmi.Naming.lookup(Naming.java:101)
    at cartago.infrastructure.rmi.CartagoInfrastructureLayer.joinRemoteWorkspace(CartagoInfrastructureLayer.java:58)
    at cartago.CartagoService.joinRemoteWorkspace(CartagoService.java:372)
    at cartago.NodeArtifact.joinRemoteWorkspace(NodeArtifact.java:99)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at cartago.ArtifactOpMethod.exec(ArtifactOpMethod.java:39)
    at cartago.Artifact.doOperation(Artifact.java:407)
    at cartago.Artifact.access$200(Artifact.java:32)
    at cartago.Artifact$ArtifactAdapter.doOperation(Artifact.java:1275)
    at cartago.WorkspaceKernel.serveOperation(WorkspaceKernel.java:1136)
    at cartago.WorkspaceKernel.access$000(WorkspaceKernel.java:48)
    at cartago.WorkspaceKernel$EnvironmentController.run(WorkspaceKernel.java:1477)

因此,它表明客户端找到了服务器,但发生了错误并且连接被拒绝。怎么了?CArtAgO 的默认连接端口是哪个?

4

1 回答 1

0

CArtAgO 使用 Java RMI,默认端口为 20100。对于 LipeRMI 连接,默认端口为 20101。其他常量可以查看http://www.emse.fr/~boissier/enseignement/maop17-spring/doc/api/cartago -api/index.html?constant-values.html

建议让服务器和客户端不受限制地检查 iptables INPUT、FORWARD 和 OUTPUT 是否在任何情况下都显示 ACCEPT。您可以使用以下命令:

$ iptables -L -v

在运行 JaCaMo 应用程序的 linux 上,您可以查看应用程序是否打开了端口 20100(您可以使用 ss 或 netstat)。20100 端口的响应应该是“LISTEN”

$ ss -tnl | grep 20100

或者

$ netstat -tuplen | grep 20100

还必须让 DNS 为机器工作,因为连接将使用名称。您可以使用机器名称通过命令 ping 对其进行测试。来自客户:

$ ping name_server

从服务器(ping 客户端)

$ ping name_client1

如果没有解析名称的 DNS 服务器,则需要编辑 /etc/hosts 文件。考虑到 ip 192.168.0.1 上名为“myserver_hostname”的服务器和 ip 192.168.0.2 上名为“myclient_hostname”的客户端,服务器和客户端两台机器上的文件可能如下所示:

127.0.0.1 localhost
#127.0.1.1 myserver_hostname -- RMI will not use it anymore
192.168.0.1 myserver_hostname
192.168.0.2 myclient_hostname
于 2017-12-04T00:39:05.030 回答