gpt4 book ai didi

sockets - 同步读取和写入到 TCP 套接字

转载 作者:IT王子 更新时间:2023-10-29 01:46:18 25 4
gpt4 key购买 nike

我正在尝试与响应消息的 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 的异步性质而发生的。这样做的惯用方法是什么?是协程吗?为读者提供一个连续的 for { .. } 循环? sync.Wait 机制?感谢帮助。谢谢。

最佳答案

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

[编辑] 需要说明的是:Go 的网络模型是同步的,就像任何旧式套接字程序一样。 Go 使用内部高效的技巧来处理它,但作为一名程序员,您可以轻松地编写顺序代码,这就是 goroutines 的全部意义所在。 Goroutines 可以像线程一样,但它们非常便宜,您可以创建很多(又名 fibers)。

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

关于sockets - 同步读取和写入到 TCP 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com