Я пишу FTP-сервер на Go и столкнулся с проблемой при выводе списка файлов / каталогов. Кажется, что происходит то, что сервер отправляет файлы по отдельности и правильно, но при чтении их из соединения они считываются по нескольку раз.
Я пытался изменить размер буфера, а также отправить подтверждение перед отправкой каждого имени файла, но при чтении из соединения заканчивается чтение большего количества байтов, чем ожидалось.
Это относительная часть с сервера:
for _, fn := range files {
conn.Write([]byte(fn.Name()))
}
В приведенном выше коде files
равно []os.FileInfo
из ioutil.ReadDir("./")
, чтобы получить файлы в текущем каталоге. При проверке это отправляет правильное имя файла, а также правильные байты для каждого имени.
На клиенте у меня это:
var buf [256]byte
for i := 0; i < int(amnt); i++ {
n, err = conn.Read(buf[:])
if err != nil {
fmt.Printf("Error getting files: %s\n", err)
}
fmt.Printf("%s\n", string(buf[:n]))
}
int(amnt)
это просто int
для количества файлов в каталоге и является правильным.
Сервер отправляет все правильно, поэтому я уверен, что проблема заключается в чтении в buf
, но я не могу понять, почему он будет считывать более одного имени файла одновременно.