我正在尝试与响应消息的TCP服务器通信:
package main
import (
"net"
"log"
)
func handleErr(err error) {
if err != nil {
log.Fatal(err)
}
}
func main() {
// connect
host := "1.2.3.4:5678"
conn, err := net.Dial("tcp", host)
handleErr(err)
defer conn.Close()
// write to socket
message := "Test\n"
conn.Write([]byte(message))
// read from socket
// (assume response is 'Test\n')
reply := make([]byte, 1024)
conn.Read(reply)
log.Println(string(reply))
}
我要完成的工作是将消息发送到另一端的套接字服务器,等待响应,然后对其进行处理。我似乎无法正确同步这些写入/读取操作以正确计时-现在,读取操作似乎阻止了写入;我假设这是由于Go的异步性质而发生的。什么是惯用的方式?是goroutines吗?for { .. }
对读者来说是一个连续的循环吗?有sync.Wait
机制吗?感谢帮助。谢谢。
您的代码应该可以正常工作。Golang非常简单,无需考虑同步读取/写入调用。
[编辑]要清楚:Go的网络模型是同步的,就像任何旧式套接字程序一样。Go使用内部有效的技巧来处理它,但是作为程序员,您可以轻松编写顺序代码,这是goroutine的全部要点。Goroutine可以像线程一样,但是它们是如此便宜,以至于您可以创建很多线程(又称纤维)。
请记住,TCP可能不会一次发送所有数据。您应该始终检查返回值以确保已发送所有内容。也许服务器只是收到消息的一部分,然后等待更多,但是您的客户端已经在等待答案了?只是一个猜测。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句