我不得不使用golang在Azure Linux VM中实现HTTP服务器。下面是简单的golang服务器代码,侦听端口30175。该端口上没有防火墙。
<b>January</b><br>FurryWheels ANMINB, <br><br>
<b>September</b><br>Hanazuki ANMINB, Hanazuki TESTNAME, <br><br>
<b>August</b><br>MightyMagisword ANMINB, <br><br>
<b>November</b><br>Niko ANMINB, <br><br>
<b>December</b><br>Niko TESTNAME, <br><br>
<b>March</b><br>TeenTitansGo! ANMINB, <br><br>
sudo netstat -tlnp的结果是:
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":30175", nil))
}
我只能在localhost中获得响应,而从远程服务器中没有响应:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1605/vsftpd
tcp 0 0 127.0.0.1:3350 0.0.0.0:* LISTEN 1873/xrdp-sesman
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1697/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1379/cupsd
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 4879/8
tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN 15507/9
tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN 1859/xrdp
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 2112/python
tcp6 0 0 :::22 :::* LISTEN 1697/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1379/cupsd
tcp6 0 0 ::1:6010 :::* LISTEN 4879/8
tcp6 0 0 ::1:6011 :::* LISTEN 15507/9
tcp6 0 0 :::30175 :::* LISTEN 46595/HttpHandler
curl localhost:30175
Hi there, I love !
答案 0 :(得分:1)
这与您的代码无关。这是一个典型的防火墙问题。
ufw
实用程序并运行sudo ufw allow 30175
答案 1 :(得分:0)
您正在尝试输出到控制台。您是否尝试发送它作为回复?
func handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(fmt.Sprintf("Hi there, I love %s!", r.URL.Path[1:])));
}
答案 2 :(得分:0)
否,如果您不指定地址的主机部分,则服务器将在系统的每个可用单播地址和每个可用播音地址上进行侦听。因此,我会猜测名称解析或路由方面的问题。
答案 3 :(得分:0)
您的问题是您的服务器正在tcp6堆栈上侦听。尝试显式地将tcp与“ 0.0.0.0:6789”一起使用,而不仅仅是端口“:6789”
答案 4 :(得分:0)
这是由于Linux监听规则所致。 我的规则有一条拒绝所有规则的事情。
# listen rules
sudo iptables -L INPUT --line-numbers
sudo iptables -D INPUT 8