Недостаточно памяти при передаче большого файла - PullRequest
0 голосов
/ 17 октября 2018

Я использую Go Gob для передачи больших файлов (~ 1 ГБ) или множества маленьких файлов (~ 30 МБ).Сервер работает в цикле и будет получать файлы, когда клиенты его отправляют.

Мой код работает, если я отправляю один большой файл или несколько небольших файлов, но при отправке большого файла во второй раз онвозвращает «фатальную ошибку: время выполнения: недостаточно памяти».Если я отправляю большой файл, останавливаю программу, затем снова запускаю и отправляю другой большой файл, он работает.

Он смотрит после получения файла через Gob и записи в файл, но не освобождает память.

Код сервера

type FileGob struct {
  FileName    string
  FileLen     int
  FileContent []byte
}

func handleConnection(conn net.Conn) {
  transf := &FileGob{}
  dec := gob.NewDecoder(conn)
  err := dec.Decode(transf)       // file from conn to var transf
  if err != nil {
    fmt.Println("error to decode into buffer:", err)
  }

  conn.Close()
  file, err := os.Create("sent_" + transf.FileName)
  if err != nil {
    fmt.Println("error to create file:", err)
  }
  file.Write(transf.FileContent)     // writes into file

  fileStat, err := file.Stat()
  if err != nil {
    fmt.Println("error to get File Stat:", err)
  }

  file.Close()
  fmt.Printf("File %v was transferred\n", transf.FileName)
  fmt.Printf("Transferred: %d, Expected: %d\n", fileStat.Size(), transf.FileLen)
}
...