我正在尝试与响应消息的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
机制?感谢帮助。感谢。
答案 0 :(得分:1)
你的代码应该工作应该工作得很好。 Golang很简单,没有必要考虑同步读/写调用。
[编辑]要明确:Golang网络模型是同步的,就像任何旧式套接字程序一样。 Golang使用内部有效的技巧来处理它,但作为程序员,您可以很方便地编写顺序代码,这是关于goroutines的全部观点。 Goroutines可以像线程一样,但是它们非常便宜,你可以创建很多它们(a.k.a。fibers)。
请记住,TCP可能不会一次性发送每个部分。您应该始终检查返回值以确保所有内容都已发送。也许服务器只收到部分消息并等待更多,但您的客户端已在等待答案?只是一个猜测..