Я хочу написать клиент, который может общаться с Vowpal Wabbit
по TCP.По сути, мне нужно отправлять сообщения типа a b | c d e
на хост VW через порт 26542. VW отвечает сообщением типа 0.400000 0.200000 0.200000 0.200000
(не уверен, как заканчивается сообщение).
Итак, мне нужно сделать это несколькоtimes - отправить сообщение, получить сообщение, отправить сообщение, получить сообщение и т. д.
У меня есть следующий код в Java.
public class MyClient {
protected String host;
protected int port;
protected Socket socket;
protected PrintWriter outputWriter;
protected BufferedReader inputReader;
public MyClient(String host, int port) throws IOException {
socket = new Socket(host, port);
outputWriter = new PrintWriter(socket.getOutputStream());
inputReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
public void send(final String message) throws IOException {
outputWriter.print(message+"\n"); // important to add a newline
outputWriter.flush();
String responseStr = inputReader.readLine();
System.out.println(responseStr);
if (StringUtils.isBlank(responseStr)) {
return;
}
}
}
Я использую этот класс следующим образом:
MyClient client = new MyClient("host_ip", 26542); // the port used by VW
client.send("1:0.5:0.3 | feature11 feature21 feature31");
client.send("1:0.5:0.3 | feature12 feature22 feature32");
client.send("1:0.5:0.3 | feature13 feature23 feature33");
При использовании приведенного выше кода печатается только ответ первой отправки.Два других ответа возвращаются null
.
Я также пытался использовать только код "отправить":
public void send(final String message) throws IOException {
outputWriter.print(message+"\n"); // important to add a newline
outputWriter.flush();
}
Оказывается, отправляется только первое сообщение (у меня есть способпроверка / регистрация на стороне сервера того, что он получает от моего клиента).
Почему только первая отправка успешна, но все остальные отправляются неудачно (хотя исключение не возникает)?Как мне это исправить?