gpt4 book ai didi

node.js - 如果 TCP 服务器(nodejs)发送没有分隔符的数据,TCP 客户端(golang)如何知道数据何时结束 "\n"

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

我的问题:

我正在尝试读取 TCP 服务器(nodejs)发送的数据但我不能,服务器发送数据时没有分隔线“\r\n”或“\n”

我是 Golang 的新手,但我一直在尝试很多方法来获取服务器发送的所有数据。

来自 Server.js 的代码,这是一个简单的示例

var net = require('net');

var server = net.createServer(function(socket) {
console.log("New Client")

socket.on('data', function(data){
console.log("data",data,data.toString())
socket.write("qweqweqkjwebqkjwhbekqjwbekjqbwkejhqwkjehqkwjehkqjwehkqjwhekjqhwekjhqwe")
})
socket.on('error', function(error){
console.error("Error:",error)
})
});

server.listen(4001, '127.0.0.1');

我的 golang 代码

package main

import (
"bufio"
"fmt"
"io"
"log"
"net"
"time"
)

func main() {
conn, _ := net.Dial("tcp", "127.0.0.1:4001")

for {
fmt.Println("Send Text")
fmt.Fprintf(conn, "Hello")

// message, _ := bufio.NewReader(conn).ReadString('\n')
// message, _ := bufio.NewReader(conn).ReadString('\r')
message, _, _ := bufio.NewReader(conn).ReadLine() // how i know when data end if server doesn't send separator like "\n" "\r"
fmt.Println("Message from server: " + message)

time.Sleep(time.Second * 3)
}
}

客户端 Golang 的输出:

Send Text

就是这样,客户端(golang)正在等待换行

问题:

1.- net(nodejs) 中有标准大小的缓冲区吗?
2.- 我如何在没有断线的情况下读取服务器在 golang 中发送的数据? (在nodejs中客户端和服务器没有问题)
3.- 我需要逐字节读取吗?并从 Server(nodejs) 发送的缓冲区中找到\x00 ? (如果是这样怎么办?)
4.- nodejs 中的服务器和客户端使用分隔符,但是当它们向另一方发送数据时,另一端的分隔符被删除了吗?

我已经测试了这个例子,但是没有人break cicle for

reader := bufio.NewReader(conn)
// for {
// time.Sleep(time.Second * 3)
// // buff := make([]byte, 4)
// test, _ := reader.ReadByte()
// fmt.Printf("%q\n", test)
// fmt.Printf("%x\n", test)
// }

// buf := make([]byte, 1)
// for {
// n, err := reader.Read(buf)
// fmt.Println(n, err, buf[:n])
// if err == io.EOF {
// break
// }
// }

// buf := make([]byte, 4)
// if _, err := io.ReadFull(reader, buf); err != nil {
// log.Fatal(err)
// }
// fmt.Println(string(buf))

buf, err := ioutil.ReadAll(reader)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(buf))

最佳答案

这是关于 TCP 数据传输,通常在这种情况下,您应该为您的数据定义一个协议(protocol)来定义将发送多少字节,通常还有一个用于数据包结尾的分隔符。例如

[n-Bytes for data lenght][data][separator bytes]

其实ReadLine也用了这个方法,只是有分隔符而已

关于node.js - 如果 TCP 服务器(nodejs)发送没有分隔符的数据,TCP 客户端(golang)如何知道数据何时结束 "\n",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53387559/

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