неполный [] байт с net.conn.Read () - PullRequest
0 голосов
/ 15 октября 2019

Я кодирую сеть сокетов с Golang, я хочу отправить данные в клиент с помощью goroutine и прочитать данные на сервере также с помощью goroutine. часть моего кода:

клиент:

    buf := bufio.NewReader(file)
    var toWrite [][]byte
    for {
        w, _, end := buf.ReadLine()
        if end == io.EOF {
            break
        }
        toWrite = append(toWrite, w)
    }

    var wg sync.WaitGroup
    wg.Add(len(toWrite))

    for _, word := range toWrite {
        w := word

        go func() {
            defer wg.Done()
            conn.Write(append(w, byte('\n')))
            log.Info(string(w), "\n")
        }()

    }
    wg.Wait()

сервер:

    for {
        conn, err := listen.Accept()
        defer conn.Close()

        if err != nil {
            log.Fatal("accept err: ", err)
            break
        }
        go func() {
            data := make([]byte, 1024)
            for {
                _, err := conn.Read(data)
                if err != nil {
                    break
                }
                log.Info(string(data))
            }
        }()
    }

Однако, когда я запускаю их в своем терминале, иногда он показывает некоторые неполные слова

INFO[2019-10-15T23:36:11+08:00] increased
based
Up
p       // no "p" in my file
Up
Up
Up
Up

Up
Up
Up
Up
Up
Up
Up

(в файле, который я открыл в клиенте, много "вверх") есть ли способ это исправить?

1 Ответ

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

conn.read () возвращает количество байтов, в которых он действительно мог прочитать. То, что вы получите от read (), зависит от множества факторов, включая буферы tcp и т. Д. Если вы хотите распечатать отформатированныйтекст, вам нужно прочитать до '\ n', а затем перейти к следующей строке. TCP обеспечивает непрерывный поток данных от однорангового конца. Вам нужно найти способ прочитать правильные байты и правильное их количество.

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