2 回答
TA贡献1998条经验 获得超6个赞
因为您正在获得源源不断的数据流,所以服务器需要知道如何分隔消息。一种方法是使用换行符。
我在下面修改了您的代码。
转到服务器:包 main
import (
"bufio"
"log"
"net"
)
func main() {
l, err := net.Listen("tcp", ":1200")
if err != nil {
log.Fatal(err)
}
defer l.Close()
for {
conn, err := l.Accept()
if err != nil {
log.Fatal(err)
}
go func(c net.Conn) {
for {
message, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
log.Printf("Error: %+v", err.Error())
return
}
log.Println("Message:", string(message))
}
}(conn)
}
}
客户端nodejs:
var net = require('net');
let packet = {
Target: { Host: "", Port: "9000" },
Name: { Family: "Newmarch", Personal: "Jan" },
Email: [
{ Kind: "home", Address: "jan@newmarch.name"},
{ Kind: "work", Address: "j.newmarch@boxhill.edu.au"}
]
}
var client = new net.Socket();
client.connect(1200, '0.0.0.0', function() {
console.log('Connected');
// Send 10 messages
for(var i = 0; i < 10; i++) {
client.write( (new Buffer(JSON.stringify(packet), 'UTF-8')) );
client.write('\n');
}
client.end();
});
client.on('data', function(data) {
console.log('Received: ' + data);
client.destroy();
});
client.on('close', function() {
console.log('Connection closed');
});
TA贡献1833条经验 获得超4个赞
从io
包文档:https://golang.org/pkg/io/#Copy, Copy 函数复制直到遇到 EOF。
您不会手动发送 EOF,但关闭连接的客户端会这样做,因此 Copy 功能可以完成复制。
您可以使用bufio
包来读取带有分隔符的字符串:
line, err := bufio.NewReader(conn).ReadString('\n')
在上述情况下,分隔符是换行符。您可以重复使用阅读器在其上重复调用 ReadString 以检索更多消息。
- 2 回答
- 0 关注
- 277 浏览
添加回答
举报