为了账号安全,请及时绑定邮箱和手机立即绑定

带有 Java 客户端的 golang 服务器

带有 Java 客户端的 golang 服务器

Go
qq_花开花谢_0 2022-01-10 14:56:12
我有一个大问题......我们有一个关于学校和工作的项目。我编写了 go 服务器,我的伙伴编写了 java 客户端。我有一个问题,如果他发送类似“Hello World”的内容,golang 服务器会将其拆分为“Hello”和“World”Java 代码:public class DataController {public String recieveDataFromServer(Socket socket) throws Exception {    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));    while (!bufferedReader.ready()) { }    String data = bufferedReader.readLine();    return data;}public void sendDataToServer(Socket socket, String data) throws Exception{    PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);    printWriter.println(data);}}去代码:func handleRequest(conn net.Conn) {request := make([]byte, 256)for {    _, err := conn.Read(request)    if err != nil {        Error.Println(err.Error())        return    }                   Info.Println("Message Received: " + string(request))    message := []byte(time.Now().String())    message = append(message, []byte(": ")...)    message = append(message, request...)    broadcast(message)}}广播功能只是对所有连接执行 conn.Write(msg) 。有谁知道问题出在哪里?编辑:我发现了问题。Java 在每个单词后添加一个 \r\n。然后 go server 认为消息结束了。我们现在切换到 c#。在使用 bufferedWriter 写入套接字时,它更容易并且工作正确。
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

在这种情况下,我会建议使用 gRPC。这是文档

这是gitrepo

使用protobuf而不是 JSON 来定义服务合同。

因此,您也可以将此服务用于其他可能使用任何语言的客户。

为了实现这一点,您只需要提取您的服务合同并以客户各自的语言生成您的合同。

在构建方面可能有点贵,但它会让你的项目可重用,而且你肯定会学到一些新东西。


查看完整回答
反对 回复 2022-01-10
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您可能需要先发送要读取的字节数,然后再发送要使用 io.ReadFull 函数读取的字节...这样您就可以确定读取了所有字符串...

在 go https://golang.org/pkg/io/https://golang.org/pkg/io/ 中阅读全文

ReadFully Java 与 DataInputStream :https://docs.oracle.com/javase/8/docs/api/

  • 首先读取 int 的字节数....

  • 稍后使用 io.ReadFull 方法读取字节...

注意:您需要将 bigendianess 中的整数写入 java。

binary.Write(tx, binary.BigEndian, value)

我的建议是让复杂的 go 和 read int 和 readFull 字节在 java 中......

注意:如果您需要发送图像或类似的东西,您只能在两个方向上简单地写入字节......

在 Go 中发送和写入字节的代码

在 Java 中发送和写入字节的代码

我希望这有帮助...


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信