Программа, которая прослушивает соединения в фоновом режиме, а также ожидает ввода пользователя - PullRequest
0 голосов
/ 06 октября 2019

Я хочу создать программу, которая ожидает ввода данных пользователем и в то же время прослушивает соединения в фоновом режиме. Ни одна из моих функций не зависит от другой. Я новичок в Go, поэтому я не уверен, как мне это сделать. Можно ли это сделать?

func listen() {
    listener, _ := net.Listen("tcp4", ":" + port)
    defer listener.Close()

    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println(err)
            return
        }
        // Some stuff
    }
}


func getNewTransaction() {
    for {
        reader := bufio.NewReader(os.Stdin)
        fmt.Println("Receiver: ")
        receiver, _ := reader.ReadString('\n')

        var amount float32
        fmt.Println("Amount: ")
        fmt.Scanf("%f", &amount)

    }
}


func main() {
    go listen()
    go getNewTransaction()

    select{}
}

1 Ответ

0 голосов
/ 06 октября 2019

Ваш исходный код не показывает, как port доступен внутри функции listen. Так что я почти уверен, что в этой функции происходит сбой кода.

Я обновил функцию listen, которая принимает пользовательский ввод. Заменяет select{} на группу ожидания.

Вот рабочий код:

package main

import (
    "bufio"
    "fmt"
    "net"
    "os"
    "sync"
)

func listen(port string) {
    listener, _ := net.Listen("tcp4", ":"+port)
    defer listener.Close()

    fmt.Println("Telnet to: ", port)

    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println(err)
        } else {
            conn.Write([]byte("kthx bye!"))
        }

        conn.Close()

    }
}

func getNewTransaction() {
    for {
        reader := bufio.NewReader(os.Stdin)
        fmt.Println("Type something and press enter: ")
        input, _ := reader.ReadString('\n')

        fmt.Println(input)
    }
}

func main() {
    go listen("8080")
    go getNewTransaction()

    wg := &sync.WaitGroup{}
    wg.Add(1)
    wg.Wait()
}
...