如何向Golang中的TCP服务器发送整数?
我的Go中有以下客户端和服务器: 客户:如何向Golang中的TCP服务器发送整数?,go,tcp,Go,Tcp,我的Go中有以下客户端和服务器: 客户: package main import ( "bytes" "encoding/binary" "fmt" "io" "net" ) func main() { var num1 int buf := new(bytes.Buffer) fmt.Scanln(&num1) fmt.Printf(&q
package main
import (
"bytes"
"encoding/binary"
"fmt"
"io"
"net"
)
func main() {
var num1 int
buf := new(bytes.Buffer)
fmt.Scanln(&num1)
fmt.Printf("I'm the client, your input was the number: %d", num1)
//escribir el numero a b, el buffer
err := binary.Write(buf, binary.LittleEndian, num1)
//Llama al server
conn, err := net.Dial("tcp", "localhost:9000")
if err != nil {
panic(err)
}
//Escribe buffer a la conexion
buf.WriteTo(conn)
//Cierra la conexión
defer conn.Close()
//Lee la conexión y la imprime
bs, _ := io.ReadAll(conn)
fmt.Println(string(bs))
}
服务器:
package main
import (
"encoding/binary"
"fmt"
"io"
"net"
)
func main() {
//Escuchar un request
ln, err := net.Listen("tcp", ":9000")
if err != nil {
panic(err)
}
defer ln.Close()
var num int
for {
//Recibir un request
conn, err := ln.Accept()
if err != nil {
panic(err)
}
err = binary.Read(conn, binary.LittleEndian, &num)
io.WriteString(conn, fmt.Sprintf("I'm the server, the number I received is: ", num))
conn.Close()
}
}
我的服务器正在发回消息,但显然它接收到的是0,而不是用户输入的数字。看起来这应该是一件简单的事情,但我想不出来
我不确定我是否在尝试正确的实现来实现这一点。有更好的办法吗?如果没有,为什么我的服务器没有正确接收int?总是处理错误
调用binary.Read(conn,binary.LittleEndian,&num)
和binary.Write(buf,binary.LittleEndian,num1)
返回一个错误,指出不支持int
s
编码/二进制包使用固定大小的数字()。int
的大小不是固定大小,因为大小取决于平台
在客户端中声明num1
,在服务器中声明num
,以使用固定大小的类型。例如,将两个声明都更改为int32
向Sprintf调用添加格式谓词。我在此处添加%v:
io.WriteString(conn, fmt.Sprintf("I'm the server, the number I received is: %v", num))
.谢谢!这是向TCP服务器发送数据的常用方法还是有更好的方法?@samuel amg二进制编码是通过TCP发送数据的常用方法。