后台监听连接并等待用户输入的程序

问题描述 投票:0回答:1

我想创建一个程序,等待用户输入,同时在后台监听连接。我的两个功能都不依赖于另一个。我是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{}
}
go networking blocking
1个回答
0
投票

您的原始代码未显示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()
}
© www.soinside.com 2019 - 2024. All rights reserved.