gpt4 book ai didi

sockets - 从 go 中的套接字读取时遇到问题

转载 作者:IT王子 更新时间:2023-10-29 01:24:23 29 4
gpt4 key购买 nike

我正在尝试学习 go 语言,并且正在编写一个简单的 echo 服务器。不过,我很难让它发挥作用。

func listen(server string) {
var buf []byte

listener, ok := net.Listen("tcp", server)
if ok != nil {
fmt.Fprintf(os.Stderr, "Could not listen on socket: %s\n", ok.String())
return
}
conn, ok := listener.Accept()
if ok != nil {
fmt.Fprintf(os.Stderr, "Could not accept connection on socket: %s\n", ok.String())
return
}

writelen, ok := conn.Write(strings.Bytes("Ready to receive\n"))
if ok != nil {
fmt.Fprintf(os.Stderr, "Could not write to socket: %s\n", ok.String())
} else {
fmt.Printf("Wrote %d bytes to socket\n", writelen)
}

for ;; {
readlen, ok := conn.Read(buf)
if ok != nil {
fmt.Fprintf(os.Stderr, "Error when reading from socket: %s\n", ok.String())
return
}
if readlen == 0 {
fmt.Printf("Connection closed by remote host\n")
return
}

fmt.Printf("Client at %s says '%s'\n", conn.RemoteAddr().String(), buf)
}
}

我从这个函数得到以下输出:

[nathan@ebisu ~/src/go/echo_server] ./6.out 1234
Using port 1234
Wrote 17 bytes to socket
Error when reading from socket: EOF

这是我在客户端看到的:

[nathan@ebisu ~] telnet 127.0.0.1 1234
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Ready to receive
Connection closed by foreign host.

我们将不胜感激(或指向资源的指针;关于套接字 API 的 go 文档还有一些不足之处)。

谢谢,

内森

最佳答案

在您的示例中,buf 需要具有确定的大小。您已将其声明为长度为 0 的 slice 。

声明为:

var buf = make([]byte, 1024)

关于sockets - 从 go 中的套接字读取时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2270670/

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