【问题标题】:Specify local IP address in net.DialTCP在 net.DialTCP 中指定本地 IP 地址
【发布时间】:2013-03-29 10:47:50
【问题描述】:
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: An invalid argument was provided。”我很困惑,本地IP地址应该总是为零吗?

版本:1.1 Beta 操作系统:Win7 64位

在 go 1.0.3 中试过,感觉还可以

【问题讨论】:

  • 用 go tip 测试似乎工作正常。
  • 在建立 TCP 连接时想要提供本地地址是很不寻常的,因此您可能想要使用net.Dial("tcp", "192.168.1.104:5000")。如果您确实想指定本地地址和端口,请检查本地地址是否已连接到您的本地 PC,并且端口 6000 未在使用中。我在 linux 下尝试了你的示例,它运行良好,所以这可能是 Windows 问题。

标签: go


【解决方案1】:

Go 的 net 包与大多数此类实现一样,识别用于连接到 localhost 的仅端口语法:

:5000

等价于

<my-ip-address>:5000

因此,您可以这样做:

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

【讨论】:

【解决方案2】:

不,可以在 DialTCP 中指定 laddr 参数。问题是指定的端口(6000)在default Win7 dynamic port range 之外,不能用于传出连接。它实际上可以在 Linux 和 Mac 上运行(如果您没有忘记将 IP 地址更改为您自己的系统之一)。

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2017-09-09
    • 1970-01-01
    • 2015-06-22
    • 2012-11-29
    相关资源
    最近更新 更多