功能:以每秒钟一次的频率向客户端发送当前时间,代码如下:
```go
package main
import (
"io"
"log"
"net"
"time"
)
func main() {
listener, err := net.Listen("tcp", "localhost:10001")
if err != nil {
log.Fatal(err)
}
for {
conn, err := listener.Accept()
if err != nil {
log.Print(err) // e.g., connection aborted
continue
}
handleConn(conn) // handle one connection at a time
}
}
func handleConn(c net.Conn) {
defer c.Close()
for {
_, err := io.WriteString(c, time.Now().Format("15:04:05\n"))
if err != nil {
return // e.g., client disconnected
}
time.Sleep(1 * time.Second)
}
}
```
报错信息: 2018/06/27 16:08:21 listen tcp 127.0.0.1:10001: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 翻译过来时:通常只允许使用每个套接字地址(协议/网络地址/端口)。
解决办法:尝试关闭和杀死端口号上的进程,但是没有用。
其他端口号也尝试了,还是报错,大家有知道解决的办法吗?
谢谢回复,我试了,还是不行啊!
![image.png](https://static.studygolang.com/180628/19a2eacc51d230fda1b84bb8f3f9e3ed.png)
#2
更多评论
处理连接时最好使用go协程,`handleConn(conn)` 改为 `go handleConn(conn)`,不然你这个程序就只能处理一个连接,其他的都被阻塞住
#1
我是指你调用函数的时候啊,不是声明函数啊
```go
package main
import (
"io"
"log"
"net"
"time"
)
func main() {
listener, err := net.Listen("tcp", "localhost:10001")
if err != nil {
log.Fatal(err)
}
for {
conn, err := listener.Accept()
if err != nil {
log.Print(err) // e.g., connection aborted
continue
}
go handleConn(conn) // handle one connection at a time
}
}
func handleConn(c net.Conn) {
defer c.Close()
for {
_, err := io.WriteString(c, time.Now().Format("15:04:05\n"))
if err != nil {
return // e.g., client disconnected
}
time.Sleep(1 * time.Second)
}
}
```
#3