1 回答
TA贡献1883条经验 获得超3个赞
应用程序将数据发送到缓冲的读取器,然后丢弃读取器和它可能缓冲超过第一行的任何数据。
在连接的生命周期内保留缓冲的阅读器:
rdr := bufio.NewReader(conClient)
for {
netData, err := rdr.ReadString('\n')
...
您可以通过消除 goroutine 来简化代码(并修复与缓冲区问题无关的其他问题)。使用读取期限来处理无响应的服务器。
func HandleClientConnection(conClient net.Conn) {
defer conClient.Close()
chnLogging <- "Connection from " + conClient.RemoteAddr().String()
conClient.SetReadDeadline(time.Minute * SERVER_INACTIVITY_TIMEOUT_MINUTES)
scanner := bufio.NewScanner(conClient)
for scanner.Scan() {
var strctNetEncrypted stctNetEncrypted
err := json.Unmarshal(scanner.Bytes(), &strctNetEncrypted)
CheckErr(err)
switch strctNetEncrypted.IntMode {
// Insert contents of switch statement from
// question here with references to
// chnCloseConn removed.
}
conClient.SetReadDeadline(time.Minute * SERVER_INACTIVITY_TIMEOUT_MINUTES)
}
if scanner.Err() != nil {
chnLogging <- "Error from client " + conClient.RemoteAddr().String() + ": " + err.Error()
} else {
chnLogging <- "Client " + conClient.RemoteAddr().String() + " disconnected"
}
}
- 1 回答
- 0 关注
- 131 浏览
添加回答
举报
