【发布时间】:2017-05-24 22:21:10
【问题描述】:
我正在使用 golang 开发一个简单的聊天服务器和客户端。我在阅读来自 net.Conn 的消息时遇到了一些问题。到目前为止,这就是我一直在做的事情:
bufio.NewReader(conn).ReadString('\n')
由于用户按下回车键发送消息,我只需要阅读直到'\n'。但我现在正在研究加密,当在客户端和服务器之间发送公钥时,密钥有时包含'\n',这使得很难获得整个密钥。我只是想知道如何阅读整个消息而不是停留在特定字符处。谢谢!
【问题讨论】:
-
TCP 是一个面向流的协议,它没有“消息”。您需要一个不同的协议来构建您的消息。您可以简单地使用长度前缀、netstrings、bencode、HTTP,有很多选项。
-
@JimB 你能给我一个使用长度前缀的简单例子吗?这是我第一个使用 golang 的项目,我没有太多的网络经验。谢谢。
-
除了框架问题,代码
bufio.NewReader(conn).ReadString('\n')将成为问题的根源,因为缓冲区被丢弃。为每个连接创建一次 bufio.Reader,而不是每次应用从连接中读取时创建一次。
标签: networking encryption go chat public-key-exchange