去服务器听不到远程请求

时间:2014-07-19 19:09:41

标签: go

我写了一个Go服务器,只要你从localhost发送请求(并发送到localhost)就可以正常工作,但是当你尝试从浏览器(从不同的计算机)访问它时它不起作用甚至只是针对外部IP地址。我希望能够将其作为外部服务器访问,而不仅仅是本地服务器。为什么不能呢?

(简化)源代码:

package main

import (
    "fmt"
    "net"
    "os"
)

func main() {
    // Listen for incoming connections.
    l, err := net.Listen("tcp", "localhost:2082")
    if err != nil {
        fmt.Println("Error listening:", err.Error())
        os.Exit(1)
    }
    // Close the listener when the application closes.
    defer l.Close()

    for {
        // Listen for an incoming connection.
        _, err := l.Accept()
        if err != nil {
            fmt.Println("Error accepting: ", err.Error())
            os.Exit(1)
        }
        fmt.Println("Incoming connection")
    }
}

当您curl localhost:2082时,它会显示“来电连接” 当你curl mydomain.com:2082时,它什么都不做。

转发端口。我很确定这是因为我从该端口运行了一个(node.js)Web服务器,它工作正常。如果它是相关的,我在Amazon EC2实例上运行Ubuntu 12.04。

我很感激任何帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

监听任何传入IP(不只是localhost,默认映射到127.0.0.1)的一种方法是:

net.Listen("tcp", ":2082")

您还拥有net/http/#ListenAndServe功能,可以trigger listen on multiple specific ip if you want

go http.ListenAndServe("10.0.0.1:80", nil)
http.ListenAndServe("10.0.0.2:80", nil) 

在“A Recap of Request Handling in Go”中可以看到一个很好的例子。