gpt4 book ai didi

go - TCPConn Write 在套接字关闭或换行符写入之前什么都不做

转载 作者:IT王子 更新时间:2023-10-29 02:23:37 28 4
gpt4 key购买 nike

在套接字或写入器关闭之前,在没有任何换行符或空字节定界符的情况下调用 TCPConn.Write 似乎不会执行任何操作。

在此示例中,我希望 conn.Write 在写入完成后立即触发服务器上的读取,但在套接字关闭之前什么也不会发生。如果我在写一个没有换行符的字符串之前写一个带有换行符的字符串就可以正常工作。这是有意的行为吗?是否需要分隔符?或者我只是在这里遗漏了什么..

服务器

package main

import (
"log"
"net"
)

func main() {
addr, _ := net.ResolveTCPAddr("tcp4", ":8080")
l, err := net.ListenTCP("tcp4", addr)
if err != nil {
log.Fatal(err.Error())
}

defer l.Close()

for {
var conn *net.TCPConn
if conn, err = l.AcceptTCP(); err != nil {
log.Println(err.Error())
continue
}

log.Println("client connected")
go handleConnection(conn)
}
}

func handleConnection(conn *net.TCPConn) {
defer conn.Close()

for {
var b = make([]byte, 128)
bytesRead, err := conn.Read(b)
if err != nil {
break
}

log.Printf("got: %s\n", string(b[:bytesRead]))
}

log.Println("client disconnected")
}

客户端

package main

import (
"log"
"net"
"time"
)

func main() {
addr, _ := net.ResolveTCPAddr("tcp", "localhost:8080")
conn, err := net.DialTCP("tcp", nil, addr)
if err != nil {
log.Fatal(err.Error())
}

// uncommenting the following line will make the following writes work as expected
//conn.Write([]byte("hello world\n"))

for i := 0; i < 5; i++ {
conn.Write([]byte("hello"))
log.Println("wrote hello")
time.Sleep(time.Second)
}

time.Sleep(time.Second)
conn.Close()
}

最佳答案

逐字运行代码(客户端写入 hello world 保留注释)显示:

服务器:

2015/12/04 09:57:00 client connected
2015/12/04 09:57:00 got: hello
2015/12/04 09:57:01 got: hello
2015/12/04 09:57:02 got: hello
2015/12/04 09:57:03 got: hello
2015/12/04 09:57:04 got: hello
2015/12/04 09:57:06 client disconnected

客户:

2015/12/04 09:57:00 wrote hello
2015/12/04 09:57:01 wrote hello
2015/12/04 09:57:02 wrote hello
2015/12/04 09:57:03 wrote hello
2015/12/04 09:57:04 wrote hello

它似乎按预期工作,服务器每秒输出一次,如客户端写入。

这是在以下设备上测试的:go version devel +54bd5a7 Sat Nov 21 10:19:16 2015 +0000 linux/amd64

你运行的是什么版本?

关于go - TCPConn Write 在套接字关闭或换行符写入之前什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34075513/

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