我想用Go编写的tcp套接字模拟http服务器。该程序在Linux或Mac上运行良好,但在Windows上却存在一些问题。我已将内置防火墙配置为允许端口上的连接。在Windows上,当浏览器请求该程序时,它显示“无法访问此站点。连接已重置。”相反,它可以在Linux或Mac上正确响应“ Hello world”。如下。
// implement http server with tcp socket
package main
import (
"log"
"net"
"os"
)
var content = []byte(`HTTP/1.1 200 OK
Content-type: text/plain
Hello world!`)
func handleConn(conn net.Conn) {
conn.Write(content)
defer conn.Close()
}
func main() {
addr := "localhost:10000"
listener, err := net.Listen("tcp", addr)
checkErr(err)
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal(err)
continue
}
go handleConn(conn)
}
}
func checkErr(err error) {
if err != nil {
log.Fatal(err)
os.Exit(1)
}
}
我尝试更改一些代码以从Windows上的连接读取所有字节,然后,程序正确响应。
func handleConn(conn net.Conn) {
var buf = make([]byte, 1024)
_, err := conn.Read(buf)
checkErr(err)
conn.Write(content)
defer conn.Close()
}
但是我不知道为什么我必须在Windows上读取所有连接字节。