我试图解决的问题是在网络应用程序中使用io.Reader和io.Writer,而不是像我在网上找到的例子那样使用bufio和字符串。为了提高效率,我尽量避免使用这些内存副本。
我已经在播放区域(https://play.golang.org/p/-7YDs1uEc5)上使用net.Pipe创建了一个测试应用程序。有一个数据源和接收器,它们通过一对net.Pipe连接进行通信(以模拟网络连接),并在远端有一个环回,以将数据直接反映给我们。
程序一直读到loopback代理读取发送的数据,但就我所能看到的写回连接锁而言,它肯定永远不会完成。此外,接收器中的接收器永远不会接收任何数据。
我不明白为什么写不能继续,因为它与工作的路径完全对称。我还编写了其他使用双向网络连接的测试系统,但是当我停止使用bufio和ReadString时,我就遇到了这个问题。我已经看过这些代码了,看不出我遗漏了什么。
提前感谢您的帮助。
发布于 2016-09-07 03:02:22
问题在第68行:
data_received := make([]byte, 0, count)此行创建一个长度为0、容量为count的切片。对Read的调用不读取数据,因为长度为0。对Write的调用会阻塞,因为永远不会读取数据。
通过将行更改为:
data_received := make([]byte, count)请注意,“完成写入”可能不会打印出来,因为程序可以在dataSrc完成执行之前退出。
https://stackoverflow.com/questions/39355092
复制相似问题