gpt4 book ai didi

sockets - 如何重用拨号的 TCP 端口

转载 作者:IT王子 更新时间:2023-10-29 02:15:33 24 4
gpt4 key购买 nike

简而言之:
服务器(192.168.0.78)监听 8013
客户端 (10.0.2.15) 尝试连接服务器,获取其本地端口 (eg.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()
}
}

最佳答案

如果您希望客户端使用特定的本地端口号,您必须在 create() 之后 connect()< 之前 bind()/。您可以使用 bind 指定任何本地端口号(和/或特定接口(interface)) .

要重用以前的端口号,您必须让下一次连接尝试知道该端口号并且您必须使用SO_REUSEADDR "reuse" option 打开它每次或第二次绑定(bind)都不会被允许,直到第一个绑定(bind)完全到期(通常是在关闭后 2 分钟)。

那些是 C 函数名。 Go 会有类似的东西。

关于sockets - 如何重用拨号的 TCP 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com