Проблемы параллелизма при чтении и записи данных в цикле на клиентском сервере TCP - PullRequest
0 голосов
/ 29 октября 2019

Я пытался создать модель клиент-сервер для изучения некоторых вещей, и я просто пытался посылать (записывать) данные от клиента к серверу в цикле, и это просто не сработало. Я думаю, что есть некоторые проблемы параллелизма, и клиент пишет быстрее на сервер и сервер, чем читает несколько операторов за один раз. Как я могу поддерживать этот параллелизм, чтобы сервер мог прочитать только один оператор, написанный клиентом за раз? Вот код, чтобы проиллюстрировать проблему лучше.

Вот сервер handleConnection Function

func main() {

    conn, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Println("Error:", err)
    }

    for {
        ln, err := conn.Accept()
        if err != nil {
            log.Println("Error:", err)
            continue
        }

        go handleConnection(ln)
    }

}

func handleConnection(conn net.Conn) {
    buffer := make([]byte, 4096)

    for i := 0; i < 10; i++ {
        n, err := conn.Read(buffer)
        if err != nil {
            fmt.Println(err, i)
        }

        fmt.Printf("%s\n", buffer[:n])
    }

    fmt.Println("Done")

    conn.Close()
}

Здесь клиент записывает данные на сервер в цикле.

func main() {
    conn, err := net.Dial("tcp", ":8080")
    if err != nil {
        log.Println("Error:", err)
        os.Exit(1)
    }

    for i := 0; i < 10; i++ {
        _, err = conn.Write([]byte("Rehan"))
        if err != nil {
            fmt.Println(err, i)
        }
    }

    fmt.Println("Done")
    conn.Close()
}

Это вывод сервера. ![This is the Server output] 1

...