java - 向 TCP 服务器指示 Java TCP 客户端已完成写入流

标签 java go tcp client-server eof

我正在编写一个连接到 Golang TCP 服务器的 Java TCP 客户端。

服务器使用以下代码从客户端读取消息:

func (tcpHandler TCPHandler) getClientMsgBytes(connection *net.TCPConn) ([]byte, error) {
    clientMsgBytes, err := ioutil.ReadAll(connection)
    if err != nil {            
        return nil, err
    }       

    return clientMsgBytes, nil
}

我的客户端使用以下代码向服务器发送消息:

try (Socket socket = new Socket("localhost", 9000)) {
    byte[] message = getMessage();

    DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());

    outputStream.write(commandMessage);     

    // Read message from the sever...          
}

我的问题是服务器一直在等待客户端写入它的消息,即使在消息的所有字节都已写入流之后也是如此。这似乎是因为 ioutil.ReadAll 函数正在等待 io.EOF 错误作为停止从流读取的信号。

我如何告诉 Go 我已完成从 Java 写入 TCP 流?如果有帮助,我可以更改 Java TCP 客户端和 Golang TCP 服务器代码。

注意:服务器是这样写的,因为我们的 Go TCP 客户端使用以下代码:

func writeToConnection(connection *net.TCPConn, tcpCommand structs.TCPCommand) error {
    messageBytes, err := json.Marshal(tcpCommand)
    if err != nil {
        err = merry.Wrap(err)
        return err
    }

    _, err = connection.Write(messageBytes)
    if err != nil {
        err = merry.Wrap(err)
        return err
    }

    err = connection.CloseWrite()
    if err != nil {
        err = merry.Wrap(err)
        return err
    }

    return nil
}

最佳答案

调用shutdownOputput以匹配 Go 客户端中的代码。

关于java - 向 TCP 服务器指示 Java TCP 客户端已完成写入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697462/

相关文章:

java - 能解释一下 "Loggers are stored in a namespace hierarchy "是什么意思吗?

selenium - Go - 我如何安装selenium以在go语言中使用它?

go - 如何确定变量是 slice 还是数组?

c++ - boost asio : Is it possible to turn accepted tcp socket into basic_socket_iostream (or somehow get it from it)?

javascript - 如何正确启动websocket服务器?

java - 更新到SDN 3.4.1后出现异常 "The Neo Server running is of unknown type."

java - 如何将void语句转换为返回字符串的return语句?

java - 无法获取页面的完整 HTML,它会在某个点停止

google-app-engine - 解析go.mod时出错,如何在具有Cloud build的App Engine上部署go app?

java - Spring 集成和 TCP 服务器套接字 - 如何向客户端发送消息?