我正在查看以下文档,希望了解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 请求,并充当可以执行某些操作的实际服务器。但是,很明显,我在实现某些接口或某些连接管理时可能会丢失,以使其正常工作。知道那可能是什么吗?