【问题标题】:TCP connection between different hosts on different connections不同连接上不同主机之间的TCP连接
【发布时间】:2021-04-17 05:30:57
【问题描述】:

我正在尝试建立一个 TCP 连接,其中 2 台主机位于不同的网络上。我在 go lang 中做了一个客户端和服务器

Server.go

func main() {
    l, err := net.Listen("tcp",":8000")
    if err != nil{
        log.Fatal(err)
    }
    for{
        conn,err := l.Accept()
        if err != nil{
            log.Println(err)
            return
        }
        go serve(conn)
    }

}

func serve(connection net.Conn){
    defer connection.Close()
    for{
        buffer := make([]byte,1024)
        _,err := connection.Read(buffer[:])
        if err != nil{
            log.Println(err)
            return
        }
        fmt.Println(string(buffer))
    }
}

client.go

func main() {
    c, err := net.Dial("tcp",":8000")
    if err != nil{
        log.Fatal(err)
    }
    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan(){
        _,err := c.Write([]byte(scanner.Text()))
        if err != nil{
            log.Fatal(err)
        }
    }
}

当我在同一网络上的设备上运行 server.go 并使用 telnet 向服务器发送消息时,它可以正常工作。我可以发送消息,它会显示在控制台中。

但是当我尝试在具有不同网络的设备上运行 telnet 时,它不起作用。我尝试发送消息,但控制台中没有任何内容。然后我收到一条消息,类似于外部主机关闭的连接线。

我是网络新手,我不明白为什么它无法显示来自另一个网络上的另一个设备的任何消息。

如何在 go lang 的不同连接上实现 2 个不同主机之间的 TCP 连接?

谢谢。

【问题讨论】:

  • “我收到一条类似...的消息”不是可接受的问题陈述。
  • 连接失败的问题,包含连接失败消息真的很有帮助。

标签: go networking tcp


【解决方案1】:

您应该通过外部地址而不是本地地址调用: 查找服务器应用程序主机的外部地址。把它放在客户端代码中: 例如:

c, err := net.Dial("tcp","45.44.230.205:8000")

就是这样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多