Клиент и сервер обмениваются некой информацией, после получения от от сервера запроса, клиент отправляет серверу файл через net.Conn. И после отправки файла при попытке прочитать следующее сообщение сервером от клиента получаю первую строку переданного ранее файла.
Код чтения сообщений на сервере:
func get_message_from_client(c net.Conn) string {
message, _ := bufio.NewReader(c).ReadString('\n')
message = strings.TrimSpace(message)
write_log("Получено сообщение от клиента: ", message)
return message
}
Код получения файла на сервере:
func save_file(file_size int64, file_path string, c net.Conn) {
write_log("получаем файл от клиента: ", file_path)
newfile, err := os.Create(file_path)
if err != nil {
write_log("не удалось создать файл: ", file_path)
fmt.Println(err)
}
defer newfile.Close()
var BUFFERSIZE int64
var receivedBytes int64
BUFFERSIZE = 1024
for {
if (file_size - receivedBytes) < BUFFERSIZE {
io.CopyN(newfile, c, (file_size - receivedBytes))
c.Read(make([]byte, (receivedBytes+BUFFERSIZE)-file_size))
break
}
io.CopyN(newfile, c, BUFFERSIZE)
receivedBytes += BUFFERSIZE
}
}
Функции вызываются последовательно,
for {
message := get_message_from_client(c)
if message == "FILE" {
save_file(file_save.size, new_name_file, c)
send_message(c, "PASS")
}
}