«connect: соединение отказано» при попытке подключиться к localhost - PullRequest
0 голосов
/ 22 марта 2020

В настоящее время я пытаюсь создать службу 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)
    }
}

Я просмотрел настройки своего брандмауэра и заметил, что, кажется, его блокирует. Я до сих пор не уверен, связано ли это с чем-то, связанным с моим брандмауэром, или я просто упускаю что-то очень очевидное.

1 Ответ

0 голосов
/ 23 марта 2020

Начните с запуска этой программы Go в терминале - она ​​слушает порт 2000, но вы можете изменить его на 8080 или любой другой, какой вы хотите sh:

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)
    }
}

Затем in отдельный терминал запускает этот простой клиент:

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()
}

Просит его подключиться к тому же порту. Соединение должно быть успешным, и вы должны увидеть, что сервер что-то регистрирует.

Теперь попробуйте подключиться к вашему клиенту.


Без записи Go вы можете на эти вещи с помощью инструмента командной строки nc ( netcat ). nc -lv PORT создает простой сервер прослушивания на PORT, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...