我有这个侦听器函数,它在网络上侦听来自其对等方的消息。
它必须正常工作,但是当它同时收到两条消息时,我收到以下错误:
“💬 消息解码错误 - 缓冲区中有额外数据”
这可以修改为同时允许多条消息吗?
func Listen(peer Peer) {
log.Info("👂 Listening for messages from: ", peer.Address)
for {
//will listen for message to process ending in newline (\n)
msg, msgErr := bufio.NewReader(peer.conn).ReadBytes([]byte(`\n`)[0])
if msgErr == io.EOF {
peer.conn.Close()
} else if msgErr == nil {
msg, err := hex.DecodeString(string(msg[:len(msg)-1]))
mgsDecoded, decodeErr := DeserializeMessage(msg[:])
if decodeErr == nil {
// use decoded message here
} else {
log.Warn("💬 Message Decode error - ", decodeErr)
}
}
}
}
//DeserializeMessage - Decode our message from a byte array to
//networkMessage *NetworkMessage
//over the network
func DeserializeMessage(serialized_bytes []byte) (NetworkMessage, error) {
// Create new buffer and decoder
buf := bytes.NewBuffer(serialized_bytes)
enc := gob.NewDecoder(buf)
// Create new Block Instance to load the serialized block into
var networkMessage NetworkMessage
err := enc.Decode(&networkMessage)
return networkMessage, err
}
添加了我们发送消息的方式:
func SendMsgToPeer(networkMessage NetworkMessage, peer Peer) {
log.Debug("💬 Message Sent -> Peer: ", peer.Address,
" Command: ", string(networkMessage.Command),
" Payload: ", string(utils.TruncateString(networkMessage.Payload, 50)))
msg, err := networkMessage.SerializeMessage()
if err != nil {
log.Warn("❌ Error encoding message.")
}
peer.conn.Write([]byte(hex.EncodeToString(msg)))
peer.conn.Write([]byte(`\n`))
}
阿晨1998
相关分类