首页 > 解决方案 > 尝试连接到 localhost 时出现“连接:连接被拒绝”

问题描述

我目前正在尝试创建一个 TCP 服务,它只会记录/存储发送给它的任何内容。我似乎无法理解为什么我无法使用DialTCP. 我不断得到 dial tcp 127.0.0.1:8080: connect: connection refused

func main() {
    errCh := make(chan error)
    tcpAddr, _ := net.ResolveTCPAddr("tcp", "localhost:8080")

    for {
        conn, err := net.DialTCP("tcp", nil, tcpAddr)
        if err != nil {
            log.Println("Could not connect -> ", err.Error())
        } else {
            recordMessage(conn, errCh)
            err = <-errCh
            log.Println("Error", err)
            conn.Close()
        }
        log.Println("trying again in 10 seconds..")
        time.Sleep(30 * time.Second)
    }
}

我查看了我的防火墙设置,并注意到它似乎被阻止了。我仍然不确定它是否是由于与我的防火墙有关的东西,或者我只是错过了一些非常明显的东西。

标签: go

解决方案


首先在终端中运行这个 Go 程序——它侦听端口 2000,但你可以将其更改为 8080 或任何你想要的:

func main() {
    // Listen on TCP port 2000 on all interfaces.
    l, err := net.Listen("tcp", ":2000")
    if err != nil {
        log.Fatal(err)
    }
    defer l.Close()
    for {
        // Wait for a connection.
        conn, err := l.Accept()
        if err != nil {
            log.Fatal(err)
        }
        // Handle the connection in a new goroutine.
        // The loop then returns to accepting, so that
        // multiple connections may be served concurrently.
        go func(c net.Conn) {
            log.Println(c)
            // Echo all incoming data.
            io.Copy(c, c)
            // Shut down the connection.
            c.Close()
        }(conn)
    }
}

然后在一个单独的终端中运行这个简单的客户端:

func main() {
    var addr string
    if len(os.Args) > 1 {
        addr = os.Args[1]
    } else {
        addr = "localhost:2000"
    }
    conn, err := net.Dial("tcp", addr)
    if err != nil {
        log.Fatal(err)
        // handle error
    }
    fmt.Fprintf(conn, "foobar")
    conn.Close()
}

要求它连接到同一个端口。连接应该成功,您应该看到服务器记录了一些东西。

现在尝试与您的客户建立联系。


nc在不编写 Go 的情况下,您可以使用命令行工具 ( netcat )来处理这些事情。nc -lv PORT例如,在 PORT 上创建一个简单的侦听服务器。


推荐阅读