我正在尝试使用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,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56497535/