在net.DialTCP中指定本地IP地址

在net.DialTCP中指定本地IP地址

问题描述:

package main 

import (
    "fmt" 
    "net" 
) 

func main() { 

    var localaddr net.TCPAddr 
    var remoteaddr net.TCPAddr 
    localaddr.IP = net.ParseIP("192.168.1.104") 
    localaddr.Port = 6000 
    remoteaddr.IP = net.ParseIP("192.168.1.104") 
    remoteaddr.Port = 5000 

    if localaddr.IP == nil || remoteaddr.IP == nil { 
     fmt.Println("error") 
    } 

    if _, err := net.DialTCP("tcp", &localaddr, &remoteaddr); err != nil { 
     fmt.Println(err) 
    } 

    fmt.Println("End") 

} 

如果该功能指定了本地IP地址,它将始终报告运行时错误“dial tcp 192.168.1.104:5000:提供了无效参数。我很困惑,对于本地IP地址,它是否始终为零?在net.DialTCP中指定本地IP地址

去版本:1.1 Beta版 OS:Win7的64位

中去尝试1.0.3,它似乎OK

+0

测试与提示似乎工作正常。 – rputikar 2013-04-07 10:24:28

+3

想要在建立TCP连接时提供本地地址是非常不寻常的,所以你可能想要使用'net.Dial(“tcp”,“192.168.1.104:5000”)'。如果您确实想要指定本地地址和端口,请检查本地地址是否连接到本地PC,并且端口6000未使用。我在linux下试过你的例子,它工作的很好,所以这可能是一个Windows问题。 – 2013-04-07 15:29:16

你的代码是正确的,我对围棋1.0.3测试,它的工作原理,太。我认为现在是时候陈述这个问题得到解答。

Go的net包,最喜欢这样的实现,只承认端口语法,用于连接到本地主机:

:5000 

相当于

<my-ip-address>:5000 

因此,你可以这样做:

net.Dial("tcp", ":5000") 
+0

实践中的一个示例:https://github.com/GoogleCloudPlatform/kubernetes/blob/master/pkg/proxy/proxier_test.go#L41 – lf215 2014-11-30 22:16:31