2016-11-04 73 views
0

我得到这个错误与下面的代码:拨打TCP:不匹配的本地地址类型172.29.4.175拨号TCP:不匹配的本地地址类型172.29.4.175

关于如何解决此问题的任何想法?找不到http://oocms.org/question/763660/dial-with-a-specific-address-interface-golang以外的任何其他有用信息,但无法使用。

IP 172.29.4.175是目前我Macbook wifi接口的IP。

package main 

import (
    "fmt" 
    "net" 
    "net/http" 
) 

var url = "https://httpbin.org/get" 

func main() { 

    q := net.ParseIP("172.29.4.175") 
    addr := &net.IPAddr{q, ""} 

    var transport = &http.Transport{ 
     DialContext: (&net.Dialer{ 
      LocalAddr: addr, 
     }).DialContext, 
    } 

    var httpclient = &http.Client{ 
     Transport: transport, 
    } 

    req, err := http.NewRequest("GET", url, nil) 
    if err != nil { 
     fmt.Println(err) 
    } 

    req.Header.Set("User-Agent", "Test-Agent") 

    resp, err := httpclient.Do(req) 
    fmt.Println(resp, err) 
} 

回答

2

将近100%的时间,HTTP拨号将通过TCP进行连接。您只提供一个带有ip网络类型的IP地址,但TCP地址需要tcp网络类型和一个端口号。

您可以用net.TCPAddr代替net.IPAddr,或者从net.ResolveTCPAddr开始创建正确的类型。

addr := &net.TCPAddr{net.IP{172, 29, 4, 175}, 0, ""} 

addr, _ := net.ResolveTCPAddr("tcp", "172.29.4.175:0") 
+0

如此简单,却又是我花了小时图了这东西了呵呵。谢谢! – Bento