Пользовательский сервер UniData
Я смотрю на следующую документацию в надежде понять 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 и действовал как реальный сервер, который может выполнять некоторые действия. Тем не менее, очевидно, что мне не хватает реализации, возможно, некоторого интерфейса или управления соединением, чтобы заставить это работать. Любая идея относительно того, что это может быть?