我有一个大问题......我们有一个关于学校和工作的项目。我编写了 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贡献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 中......
注意:如果您需要发送图像或类似的东西,您只能在两个方向上简单地写入字节......
我希望这有帮助...
- 2 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消