1. 首页
  2. 主题
  3. Go问与答

如何指定源地址,源端口发送带有timeout 的TCP请求?

xf645 · · 2563 次点击
想作为一个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 ( &#34;net&#34; &#34;time&#34; ) func main(){ laddr, _ := net.ResolveTCPAddr(&#34;tcp&#34;, &#34;10.0.58.166:7001&#34;) d := &amp;net.Dialer{ Timeout: 2*time.Second, LocalAddr: laddr, } d.Dail(&#34;tcp&#34;, &#34;10.0.8.202:80&#34;) } ``` ```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 ( &#34;net&#34; &#34;time&#34; ) type mydial struct{ dialer *net.Dialer } func main(){ laddr, _ := net.ResolveTCPAddr(&#34;tcp&#34;, &#34;10.0.58.166:7001&#34;) d2 := mydial{} if d2.dialer == nil{ d2.dialer = &amp;net.Dialer{} } d2.dialer.Timeout = 2*time.Second d2.dialer.LocalAddr = laddr d2.dialer.Dial(&#34;tcp&#34;, &#34;10.0.8.202:80&#34;) } ```
#6
更多评论
net下面不是有一个DialTimeout吗?
#1
如描述中所说,这个没法指定源地址,源port啊
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中