gpt4 book ai didi

java - 带有 Java 客户端的 golang 服务器

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:14 24 4
gpt4 key购买 nike

我有一个大问题......我们有一个关于学校和工作的项目。我编写 go 服务器,我的伙伴编写 java 客户端。我有一个问题,如果他发送类似“Hello World”的内容,golang 服务器会将其拆分为“Hello”和“World”

See Picture

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);
}
}

go 代码:

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 服务器认为消息结束了。我们现在切换到 c#。使用 bufferedWriter 写入套接字时,它更容易且工作正确。

最佳答案

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

ReadFull in go https://golang.org/pkg/io/https://golang.org/pkg/io/

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

  • 先读取字节数....

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

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

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

我的建议是在 go 中进行复杂化,并在 java 中读取 int 和 readFull 字节...

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

Code to send and write bytes in Go

Code to send and write bytes in Java

我希望这有助于...

关于java - 带有 Java 客户端的 golang 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37156378/

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