想作为一个client发起一个tcp连接,指定源地址和源端口, 同时连接带有timeout功能
我看了net库
有一个函数
func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
可以实现带有timeout的tcp连接,但是它无法指定源端口,源地址
另一个函数
func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error)
可以带有源地址,源端口,但是,却没有timeout功能
有什么办法能实现两者兼而有之? golang目前是初学者,隐约觉得可以通过为net.Dailer这个结构来指定timeout, 但是还是不会,希望有大侠能帮忙演示简单的示例代码?
谢谢了!
<a href="/user/marlonche" title="@marlonche">@marlonche</a> 通过这种应该是没问题的,可是事实上编译它仍然会报错。 我不知道为什么会这样? 能解释一下么?
```go
package main
import (
"net"
"time"
)
func main(){
laddr, _ := net.ResolveTCPAddr("tcp", "10.0.58.166:7001")
d := &net.Dialer{
Timeout: 2*time.Second,
LocalAddr: laddr,
}
d.Dail("tcp", "10.0.8.202:80")
}
```
```bash
# go run 5.go
# command-line-arguments
./5.go:16:2: d.Dail undefined (type *net.Dialer has no field or method Dail)
root@sit-client-1:~/test#
```
我不得不采用另一种办法来实现,这种方法是采用嵌套的方式,却能成功
```go
package main
import (
"net"
"time"
)
type mydial struct{
dialer *net.Dialer
}
func main(){
laddr, _ := net.ResolveTCPAddr("tcp", "10.0.58.166:7001")
d2 := mydial{}
if d2.dialer == nil{
d2.dialer = &net.Dialer{}
}
d2.dialer.Timeout = 2*time.Second
d2.dialer.LocalAddr = laddr
d2.dialer.Dial("tcp", "10.0.8.202:80")
}
```
#6
更多评论