我正在尝试使用Anylogic的Mojave在Macbook上创建方案,这是使用许多不同工具的基于代理的仿真的一部分。我的想法是通过Java接口将Anylogic连接到Eclipse。
主要问题是,Anylogic无法响应。

我用套接字尝试了许多不同的代码,但找不到一个适用于Anylogic的代码。我使用的是Anylogic的免费版本,并在主项目下创建了Java接口。要运行Java接口,请右键单击该文件,然后选择“使用Java编辑器运行”

相比之下,我在Eclipse中创建了两个文件,其中一个是服务器,一个是客户端,并且文件可以正常工作。

所以这是我的Eclipse,我想应该没问题https://www.minpic.de/i/7wbk/nv00b

这是我在Anylogic https://www.minpic.de/i/7wbn/pzuut中的主要模型

还有一个带有服务器代码的Java接口。 https://www.minpic.de/i/7wbo/1mxsl4

我对编码非常陌生,因此希望你们能为我提供帮助。


public class server{
    public static void main(String[] args) throws IOException {
    ServerSocket ss = new ServerSocket(4995);
    Socket s = ss.accept();

    System.out.println("Client connected");
    DataInputStream dout = new DataInputStream(s.getInputStream());
    BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
    while(true) {
        String yoo = dout.readUTF();
        System.out.println("client" + yoo);
        if(yoo.equalsIgnoreCase("exit"));
        break;
    }
    ss.close();

    }
}


public class client{
    public static void main(String[] args) throws IOException {
    Socket s = new Socket("localhost",4995);
    DataOutputStream dout = new DataOutputStream(s.getOutputStream());
    BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
    while (true)
    {
        String so= br.readLine();
        dout.writeUTF(so);
        System.out.println("client" + so);
        if(so.equalsIgnoreCase("exit"));
        break;
    }
    s.close();
        }
    }


我期望两个程序的控制台都可以显示通过控制台发送的消息,但是两个程序都不能显示我在另一个程序中编写的消息。

最佳答案

Java代码本身很好,至少对于创建简单连接而言。
对于Eclipse中的服务器端,您可以像这样保留它。

但是对于AnyLogic的客户端,存在一个问题:
您不能像这样直接运行代码,因为其中有main方法。 AnyLogic不是像Eclipse这样的“普通” Java IDE,它是一个非常特殊的IDE。它会自动为您自动创建一个项目,并将运行该项目所需的所有内容放入其中,包括一个主要方法。这意味着您不需要第二种主要方法。您宁可让客户成为AnyLogic为您构建的更大程序的“一部分”。单击仅显示代码的“使用Java编辑器打开”时,您将无法在AnyLogic中运行任何代码!

因此,我们执行以下步骤:


在AnyLogic中创建Java类(简单的类,没有main方法)Client
在类中添加一个函数以启动客户端过程(在其自身的main方法触发之前)
从类Client创建实例


该类代码(已包含该功能)如下:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Client implements Serializable {

    public Client() {
    }

    public void activate() {
        try {
        Socket s = new Socket("localhost",4995);
        DataOutputStream dout = new DataOutputStream(s.getOutputStream());
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        while (true)
        {
            String so= br.readLine();
            dout.writeUTF(so);
            System.out.println("client" + so);
            if(so.equalsIgnoreCase("exit"));
            break;
        }
        s.close();
        }
        catch(IOException e) {
            System.out.println(e);
        }
    }

    /**
     * This number is here for model snapshot storing purpose<br>
     * It needs to be changed when this class gets changed
     */
    private static final long serialVersionUID = 1L;

}


创建实例并激活客户端可以使用以下代码完成,例如将其添加到按钮或AnyLogic主代理的OnStartup代码中:

Client client = new Client();
client.activate();


java - 如何解决:Anylogic无法通过Socket连接到Eclipse-LMLPHP

关于java - 如何解决:Anylogic无法通过Socket连接到Eclipse,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56497535/

10-12 02:39