同步对TCP套接字的读写

sa125

我正在尝试与响应消息的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机制吗?感谢帮助。谢谢。

r

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

[编辑]要清楚:Go的网络模型是同步的,就像任何旧式套接字程序一样。Go使用内部有效的技巧来处理它,但是作为程序员,您可以轻松编写顺序代码,这是goroutine的全部要点。Goroutine可以像线程一样,但是它们是如此便宜,以至于您可以创建很多线程(又称纤维)。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章