Я хочу смоделировать http-сервер с сокетом tcp, написанным на Go.Программа хорошо работает на Linux или Mac, но имеет некоторые проблемы на Windows.Я настроил встроенный брандмауэр, чтобы разрешить подключения через порт.В Windows, когда браузер запрашивает программу, он показывает «Этот сайт недоступен. Соединение было сброшено».Вместо этого он может правильно ответить «Hello world» в Linux или Mac.
// 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.