gpt4 book ai didi

Java套接字多次写入和读取

转载 作者:可可西里 更新时间:2023-11-01 02:57:35 24 4
gpt4 key购买 nike

我想编写一个可以通过 TCP 与 Vowpal Wabbit 通信的客户端。本质上,我需要发送像 a b | 这样的消息c d e 通过端口 26542 发送到 VW 主机。VW 以类似 0.400000 0.200000 0.200000 0.200000 的消息响应(不确定消息如何终止)。

因此,我需要多次执行此操作 - 发送消息、接收消息、发送消息、接收消息等等。

我有以下 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();
}

事实证明,只有第一条消息被发送(我有一种方法可以在服务器端验证/记录它从我的客户端接收到的内容)。

为什么只有第一次发送成功而其他所有发送都失败(尽管没有引发异常)?我该如何解决这个问题?

最佳答案

如果 readLine() 返回 null,则对等方已关闭连接。

关于Java套接字多次写入和读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50827570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com