[英]Server not receiving Data from TCP Client in GO
您好,我在GO中实现了一个服务器,该服务器从客户端读取数据并进行打印。 为了读取网络流,我正在读取服务器上的conn.Read()方法。
下面是我从网络流中读取一个字节的代码
// return a single byte after reading from buffer
func readByte(conn net.Conn,buf []byte,numberofbytes *int,bufCurrPos *int) (byte){
fmt.Printf("Byte read")
if *bufCurrPos == *numberofbytes {
for {
*bufCurrPos = 0
*numberofbytes,_ = conn.Read(buf)
if *numberofbytes ==0 {
continue
} else {
break
}
}
}
b := buf[*bufCurrPos]
*bufCurrPos++
return b
}
现在,我创建了两个将数据写入服务器的客户端。
第一个客户端使用conn.Write()方法写入流,而第二个方法使用fmt.Fprintf(bufio.NewWriter(),format string)方法写入流。
客户1
conn, err := net.Dial("tcp","localhost:8080")
if err != nil {
checkError(err)
}
go readHandler(conn)
for {
reader := bufio.NewReader(os.Stdin)
text, _ := reader.ReadString('\n')
conn.Write([]byte(text[0:len(text)-1]+"\r\n"))
}
客户2:
name := "hi.txt"
contents := "bye"
exptime := 300000
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
t.Error(err.Error()) // report error through testing framework
}
scanner := bufio.NewScanner(conn)
// Write a file
n,err := fmt.Fprintf(bufio.NewWriter(conn), "write %v %v %v\r\n%v\r\n", name, exptime, len(contents), contents)
if err !=nil {
fmt.Printf("error in writing in buffer\n")
}
服务器使用第一个客户端正确读取数据,但是对于第二个客户端,它始终始终读取0字节。
我是GO的初学者,不知道其原因。 有人可以帮我吗
client2应用程序必须刷新缓冲区。
bw := bufio.NewWriter(conn)
n,err := fmt.Fprintf(bw, "write %v %v %v\r\n%v\r\n", name, exptime, len(contents), contents)
bw.Flush()
该应用程序还应该检查错误。
bw := bufio.NewWriter(conn)
_, err := fmt.Fprintf(bw, "write %v %v %v\r\n%v\r\n", name, exptime, len(contents), contents)
if err != nil {
// handle error
}
if err := bw.Flush(); err != nil {
// handle error
}
fmt.Fprintf内部缓冲。 如果这是对连接的唯一写入,则删除缓冲的写入器。
_, err := fmt.Fprintf(conn, "write %v %v %v\r\n%v\r\n", name, exptime, len(contents), contents)
if err != nil {
// handle error
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.