最近开始学习golang,发现确实很给力,写了一个回射服务器代码,了解到可以阻塞读数据,也可以借助bufio中的**NewScanner**,我理解这是一个扫描器,用法也大概研究了一下,结果写完代码在linux上没有问题,运行正常,在windows却不能收到客户端数据,希望高手指点一二!
服务器启动后,通过客户端测试,效果如下:
![image.png](https://static.studygolang.com/171230/c99e4436e4d981a9504b1db8ec1d1926.png)
源代码如下:
``` go
//回响服务器
package main
import (
"time"
"fmt"
"log"
"net"
"bufio"//提供扫描器
"strings"
)
func main(){
//首先要创建链接侦听器
listener,err := net.Listen("tcp",":8080")
if err != nil {
log.Fatal(err)//会执行exit
}
//执行结束自动释放
defer listener.Close()
//循环等待客户端连接
for {
conn,err := listener.Accept()
if err != nil {
fmt.Println(err)
continue
}
go handleconn(conn)
}
}
//用于和客户端通信
func handleconn(conn net.Conn){
defer conn.Close()
fmt.Println("begin handleconn...\n")
//获得一个扫描器,监控客户端是否输入数据
input := bufio.NewScanner(conn)
for input.Scan(){//会阻塞等待客户端数据到来
echo(conn,input.Text(),time.Second*1)
}
fmt.Println("end handleconn...\n")
}
//回响三声
func echo(conn net.Conn,msg string,deley time.Duration){
fmt.Fprintln(conn,strings.ToUpper(msg))
time.Sleep(deley)
fmt.Fprintln(conn,msg)
time.Sleep(deley)
fmt.Fprintln(conn,strings.ToLower(msg))
}
```
有疑问加站长微信联系(非本文作者)