我正在尝试编写一个简单的tcp服务器和客户端程序。
当我同时运行下面的服务器和客户端代码时,客户端将仅接收来自服务器的时间消息并退出,并且服务器继续接受新连接。我预期的程序行为是我希望服务器也从客户端接收“hello world”消息并关闭连接,客户端也使用“响应连接”功能也是如此。
但问题是,当我启动客户端时,服务器似乎卡在了conn。读取“响应连接”函数内的函数,当我首先停止客户端时,错误为“EOF退出状态1”,这对于调试来说确实是模棱两可的。当我首先停止服务器时,客户端将从服务器接收时间数据。
如果您有任何想法,请帮助回答,因为我完全是Golang的新手。非常感谢!
服务器.go
package main
import (
"fmt"
"io"
"log"
"net"
"time"
)
type connection struct {
host string
port string
network string
}
func checkError(err error) {
if err != nil {
log.Fatalln(err)
}
}
func responseConnection(conn net.Conn) {
defer conn.Close() // <-- When responseConnection() is used, add this
buf := make([]byte, 0, 4096)
tmp := make([]byte, 256)
for {
n, err := conn.Read(tmp)
if err != nil {
checkError(err)
if err != io.EOF {
fmt.Println("Error reading: ", err)
}
// fmt.Println(err)
break
}
buf = append(buf, tmp[:n]...)
}
fmt.Println("Data from client ========> ", string(buf))
// c <- buf
}
func handleConnection(conn net.Conn) {
defer conn.Close() // <- When responseConnection() is used, remove this
dayTime := time.Now().String()
conn.Write([]byte(dayTime))
// responseConnection(conn)
fmt.Println("The end of handleConnection")
}
func main() {
localConn := connection{
host: "",
port: "5555",
network: "tcp",
}
// servicePort := ":5555"
tcpAddr, err := net.ResolveTCPAddr(localConn.network, ":"+localConn.port)
checkError(err)
l, err := net.ListenTCP("tcp", tcpAddr)
fmt.Println("Server starts listening on port", localConn.port)
checkError(err)
for {
fmt.Println("Accepting a new connection....")
conn, err := l.Accept()
checkError(err)
handleConnection(conn)
// responseConnection(conn)
}
}
慕桂英3389331
相关分类