【发布时间】:2020-04-30 12:07:01
【问题描述】:
我正在编写一个与套接字服务器连接的简单 go 程序。 我正在使用 goroutine 不断寻找传入的消息。 但是在 goroutine 内部连接被关闭。有人可以告诉我发生了什么吗?
下面是我的测试客户端
package main
import (
"fmt"
"net"
"os"
"encoding/json"
"bufio"
)
type test_user struct {
ID string
Conn net.Conn
Messages chan interface{}
}
func CreateTestUser(id string) test_user {
return test_user{id, nil, nil}
}
/*
1. Try connecting
2. Wait for connected packet
3. Send first packet (Init packet)
*/
func (user *test_user) Connect() {
conn, err := net.Dial(CONN_TYPE, CONN_HOST+":"+CONN_PORT)
if err != nil {
fmt.Println("Could not connect", err.Error())
os.Exit(1)
}
user.Conn = conn
user.Messages = make(chan interface{})
reader := bufio.NewReader(conn)
message, _ := reader.ReadBytes(DELIMITER)
user.SendMessage(InitPacket{TYPE_USER,user.ID})
//message, _ = reader.ReadBytes(DELIMITER)
//message, _ = reader.ReadBytes(DELIMITER) // If I uncomment these lines it will wait for new messages
//message, _ = reader.ReadBytes(DELIMITER)
go func() {
for {
var readErr error
message, readErr = reader.ReadBytes(DELIMITER) // this always returns error "Error on read read tcp 127.0.0.1:54694->127.0.0.1:3333: use of closed network connection"/
if readErr == nil {
var packet interface{}
error := json.Unmarshal(message, &packet)
if error != nil {
fmt.Println("Unable to parse message", string(message), error.Error())
}
user.Messages <- packet
} else {
fmt.Println("Error on read", readErr.Error())
}
}
}()
}
有人可以帮我解决这个问题吗?另外,我是 golang 的新手,请提出改进建议。
【问题讨论】:
标签: go