【发布时间】:2015-11-05 09:03:00
【问题描述】:
简短地说:
一台服务器(192.168.0.78)监听 8013
客户端(10.0.2.15)尝试连接服务器,获取其本地端口(例如 54591)
如何让客户端关闭连接重用54591?
我试过了:
1.直接关闭连接,监听同一个端口:不能复用端口
2.启动另一个程序(B)连接服务器并退出,然后尝试监听B使用的端口:未知端口
有没有正确的方法来做到这一点?
代码很简单:
客户
func main() {
conn, err := net.Dial("tcp" , "192.168.0.78:8013")
if err != nil {
panic(err)
}
localAddr := conn.LocalAddr().String()
conn.Close()
// i got the local port, what to do?
fmt.Println(localAddr)
}
服务器
func main(){
ln, err := net.Listen("tcp", ":8013")
if err != nil {
panic(err)
}
for i := 0; i < 5; i++ {
conn, err := ln.Accept()
if err != nil {
panic(err)
}
fmt.Println(conn.RemoteAddr().String(), "connected")
conn.Close()
}
}
【问题讨论】:
-
我已经测试了你的代码,但是“直接关闭连接并监听同一个端口”是可以的。没有发生错误。
-
为什么?你关心客户本地端口是什么?
-
我得到了这个:恐慌:监听 tcp 10.0.2.15:54613:绑定:地址已经在使用@Ggicci
-
@user2986683 查看github.com/jbenet/go-reuseport