有关golang tcp编程的一个问题
本文介绍了有关golang tcp编程的一个问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
问题描述:
lis.Accept()得到conn之后,bufio.NewReader(conn)是可以正常读取请求中数据的,之后bufio.NewWriter(conn)不知道为什么不能返回给客户端数据。是我哪里写错了吗?如果有问题的话,我要实现客户端、服务端互相传输数据,应该怎么写呢?有没有大神可以指导一下,感激不尽。
服务端代码
package main
import (
"bufio"
"fmt"
"io"
"net"
)
func main() {
l, err := net.Listen("tcp", ":9091")
if err != nil {
fmt.Println("listen error:", err)
return
}
for {
c, err := l.Accept()
if err != nil {
fmt.Println("accept error:", err)
break
}
go handle(c)
}
}
func handle(c net.Conn) {
temp := make([]byte, 6)
rBuf := bufio.NewReader(c)
n, err := rBuf.Read(temp)
for err != io.EOF {
if err != nil {
fmt.Println("read error:", err)
return
}
fmt.Printf("%d:%v\n", n, (string(temp)))
temp = make([]byte, 6)
n, err = rBuf.Read(temp)
}
/** 下面发送的代码无效,客户端read一直阻塞 **/
ret := []byte("rrrs")
wbuf := bufio.NewWriter(c)
wbuf.Write(ret)
wbuf.Flush()
}
解决方案
func handle(c net.Conn) {
go func() {
temp := make([]byte, 6)
rBuf := bufio.NewReader(c)
for {
n, err := rBuf.Read(temp)
if err != nil {
fmt.Println("read error:", err)
return
}
fmt.Printf("%d:%v\n", n, (string(temp)))
}
}()
ret := []byte("rrrs")
wbuf := bufio.NewWriter(c)
//下面一般要判断错误
wbuf.Write(ret)
wbuf.Flush()
}
这篇关于有关golang tcp编程的一个问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文