在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
答
你的代码是正确的,我对围棋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
测试与提示似乎工作正常。 – rputikar 2013-04-07 10:24:28
想要在建立TCP连接时提供本地地址是非常不寻常的,所以你可能想要使用'net.Dial(“tcp”,“192.168.1.104:5000”)'。如果您确实想要指定本地地址和端口,请检查本地地址是否连接到本地PC,并且端口6000未使用。我在linux下试过你的例子,它工作的很好,所以这可能是一个Windows问题。 – 2013-04-07 15:29:16