2

我正在查看以下文档,希望了解uniData。我遇到的问题是我无法制作后端服务器的“模拟真实版本”来测试我的 unidata 查询。

这是我到目前为止所拥有的:

我有一个进入服务器的主要入口,用于收听:

public static void main(final String[] args) throws UnknownHostException, IOException {
    int clientNumber = 0;
    final ServerSocket listener = new ServerSocket(31438);
    try {
        while (true) {
            new MySimulatedConnection(listener.accept(), clientNumber++).start();
        }
    } finally {
        listener.close();
    }
}

SimulatedConnection 接收请求,并尝试从中读取一些数据。(纯粹使用套接字)

@Override
public void run() {
    try {
        final BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        final PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        while (true) {
            final String input = in.readLine();
            if (input == null || input.equals(".")) {
                break;
            }
            out.print("## received message " + input);
        }
    } catch (final IOException e) {
        System.out.println("Error handling client# " + requestNumber + ": " + e.getMessage());
    } finally {
        try {
            socket.close();
        } catch (final IOException e) {
            System.out.println("## cant close socket " + e.getMessage());
        }
    }
}

在我的客户端上,我正在建立一个 uniData 会话,如下所示:

public static void main(final String[] args) throws UnknownHostException, IOException, UniSubroutineException,
        UniSessionException {
    final FakeClient faker = new FakeClient();
    faker.createConnection();
}

private void createConnection() throws UnknownHostException, IOException, UniSubroutineException,
        UniSessionException {
    System.out.println("Connecting to unidata...");
    UniSession uSession = new UniSession();
    final UniJava uj = new UniJava();

    uSession = uj.openSession();
    uSession.setHostName("127.0.0.1");
    uSession.setUserName("sample_username");
    uSession.setPassword("sample_password");
    uSession.setAccountPath("some_account");
    uSession.setTimeout(5000);

    final int port = uSession.connection.getPort();
    System.out.println("Testing connection to " + SERVER_ADDRESS + " on port " + port + "...");
    final Socket testSocket = new Socket(SERVER_ADDRESS, port);
    if (testSocket.isConnected()) {
        System.out.println("Connection successful");
        uSession.connect();
        System.out.println("## we performed the connect");

        final UniSubroutine sub = uSession.subroutine("UNIJAVA.SETUP", 3);
        sub.setArg(0, "unknwon host");
        sub.call();
        System.out.println("## sub called");
    } else {
        System.out.println("### no connection possbile!");
    }
}

为什么我要这样做?

好吧,我正在尝试看看如何创建服务器以及如何从中查询一些数据。显然,我的首选是使用套接字,因为这似乎是这里通信的基本原理。

什么有效,什么无效?

到目前为止,客户端能够连接到 tcp 套接字,并读取此行:

System.out.println("Connection successful");

但是,使用 uniApi 连接,没有成功并且超时时间很长(因为这是我在 uSession.setTimeout(5000); 值中配置它的方式:

uSession.connect();

此外,我的缓冲阅读器在服务器上没有读取任何数据,因为我猜测我传递的子例程参数实际上没有被称为字符串。

考虑到这一点,我想做什么?

我想更新我的服务器以接受 uniAPI 请求,并充当可以执行某些操作的实际服务器。但是,很明显,我在实现某些接口或某些连接管理时可能会丢失,以使其正常工作。知道那可能是什么吗?

4

0 回答 0