My problem:
I'm trying to read the data sended by TCP server(nodejs) but I can't, the server send the data without breakline " " or " "
I'm new in Golang but I have been trying a lot of things to get all the data sended by server.
Code from Server.js, this a simple example
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');
My code from 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('
')
// message, _ := bufio.NewReader(conn).ReadString('')
message, _, _ := bufio.NewReader(conn).ReadLine() // how i know when data end if server doesn't send separator like "
" ""
fmt.Println("Message from server: " + message)
time.Sleep(time.Second * 3)
}
}
Output from Client Golang:
Send Text
And that is all, the client(golang) is waiting for new line
Questions:
1.- There is a standard size of buffer in net(nodejs) ?
2.- How I can read the data sended by Server in golang without breakline? (there is no problem client and server in nodejs)
3.- I need to read byte by byte? and find \x00 from buffer sended by Server(nodejs) ? (if this is the case how?)
4.- Server and Client in nodejs works with separator, but when they send data to the other one, in the other side separator is deleted?
I have teste this examples, but no one break
the cicle for
reader := bufio.NewReader(conn)
// for {
// time.Sleep(time.Second * 3)
// // buff := make([]byte, 4)
// test, _ := reader.ReadByte()
// fmt.Printf("%q
", test)
// fmt.Printf("%x
", 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))