我正在研究一个简单的IRC库和一个机器人作为其参考实现,我遇到的问题是它无法检测服务器何时关闭连接。我正在使用Go的net.Dial函数建立连接,并使用bufio.Scanner来获取响应行。我使用的是bufio.Reader,但即使使用ReadLine(),它仍然会丢弃线条和部分线条。
到目前为止一切运行良好,但是如果你不熟悉IRC(聊天)协议,为了确保客户端仍然连接,经常在一定的时间内,服务器将发送一个PING命令,并等待客户端使用PONG命令进行回复。如果它没有响应,则服务器假定客户端已退出而未发送QUIT命令或已断开连接并关闭其连接。
我正在使用
scanner := bufio.NewScanner(server.Connection) //server.Connection is net.Conn
for scanner.Scan() {
msg = scanner.Text()
因为我认为如果连接关闭,扫描程序将“空”,但当服务器关闭连接时,它仍然停留在for循环中。我已经检查过了,scan.Err()是nil而server.Connection不是。有什么建议吗?