为了账号安全,请及时绑定邮箱和手机立即绑定

同步读写 TCP 套接字

同步读写 TCP 套接字

Go
蝴蝶不菲 2021-07-27 13:25:28
我正在尝试与响应消息的 TCP 服务器通信:package mainimport (    "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机制?帮助表示赞赏。谢谢。
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您的代码应该可以正常工作。Golang 非常简单,不需要考虑同步读/写调用。

[编辑] 需要明确的是:Go 的网络模型是同步的,就像任何旧式套接字程序一样。Go 使用内部高效的技巧来处理它,但作为程序员,您可以轻松地编写顺序代码,这就是 goroutines 的重点。够程可以像线程,但他们是如此便宜,你可以创建他们的LOT(又名纤维)。

请记住,TCP 可能不会一次性发送所有片段。您应该始终检查返回值以确保所有内容都已发送。也许服务器只收到了一部分消息并等待更多,但您的客户端已经在等待答复?只是一个猜测。


查看完整回答
反对 回复 2021-08-02
  • 1 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信