Go 不同连接上不同主机之间的TCP连接

Go 不同连接上不同主机之间的TCP连接,go,networking,tcp,Go,Networking,Tcp,我正在尝试建立一个TCP连接,其中两台主机位于不同的网络上。我在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{

我正在尝试建立一个TCP连接,其中两台主机位于不同的网络上。我在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))
    }
}

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

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

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

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


谢谢。

您应该通过外部地址而不是本地地址拨打: 查找服务器应用程序主机的外部地址。将其放入客户端代码: 例如:

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

就是这样

“我收到了一条与…有关的消息”不是一个可接受的问题陈述。问题在于您的连接失败,包含连接失败消息将非常有帮助。
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)
        }
    }
}