golang tcp套接字在不同操作系统上的不同行为

时间:2019-04-12 15:21:26

标签: windows sockets http go

我想用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上读取所有连接字节。

0 个答案:

没有答案