我写了一个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。
我很感激任何帮助。谢谢!
答案 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”中可以看到一个很好的例子。