2013-04-07 190 views
3
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

回答

0

你的代碼是正確的,我對圍棋1.0.3測試,它的工作原理,太。我認爲現在是時候陳述這個問題得到解答。

1

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