我正在尝试在 Go 中进行简单的控制台聊天,只是为了练习。但是,我不知道如何从服务器发回消息。服务器只是收到一条消息,然后关闭连接。我该如何发送回复?
我一直在搜索并找到有关 websockets 的信息,但我认为它们用于与浏览器交互。
这是服务器的两个功能:
func runServer() {
// Listen on a port
listen, error := net.Listen("tcp", ":8272")
// Handles eventual errors
if error != nil {
fmt.Println(error)
return
}
fmt.Println("Listening in port 8272.")
for {
// Accepts connections
con, error := listen.Accept()
// Handles eventual errors
if error != nil {
fmt.Println(error)
continue
}
fmt.Println("Connection accepted.")
// Handles the connection
go handleConnection(con)
}
}
func handleConnection(con net.Conn) {
fmt.Println("Handling connection.")
var message string
// Decodes the received message
decoder := gob.NewDecoder(con)
error := decoder.Decode(&message)
// Checks for errors
if error != nil {
fmt.Println(error)
} else {
fmt.Println("Received", message)
}
// Closes the connection
con.Close()
fmt.Println("Connection closed.")
}
这是客户端的功能:
func runClient() {
// Connects to server
con, error := net.Dial("tcp", "127.0.0.1:8272")
// Handles eventual errors
if error != nil {
fmt.Println(error)
return
}
fmt.Println("Connected to 127.0.0.1:8272.")
// Sends a message
message := "Hello world"
encoder := gob.NewEncoder(con)
error = encoder.Encode(message)
// Checks for errors
if error != nil {
fmt.Println(error)
}
con.Close()
fmt.Println("Message sent. Connection closed.")
}
提前致谢。