@nelle
Для организации копирования файлов с одного клиента на другой по сети на языке Go можно использовать пакет net
для создания сетевого соединения и передачи данных между клиентами, а также пакет os
для работы с файлами.
Вот пример простого сервера-получателя на Go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package main import ( "fmt" "io" "net" "os" ) func main() { // Создаем TCP сервер на локальном адресе и порте ln, err := net.Listen("tcp", "localhost:8080") if err != nil { fmt.Println(err) return } defer ln.Close() fmt.Println("Сервер ожидает подключения...") // Принимаем новые клиентские подключения conn, err := ln.Accept() if err != nil { fmt.Println(err) return } defer conn.Close() fmt.Println("Клиент подключен.") // Создаем файл, куда будут записываться данные file, err := os.Create("копия_файла.txt") if err != nil { fmt.Println(err) return } defer file.Close() // Копируем данные из сетевого соединения в файл _, err = io.Copy(file, conn) if err != nil { fmt.Println(err) return } fmt.Println("Файл успешно скопирован.") } |
А вот пример клиента-отправителя на Go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package main import ( "fmt" "io" "net" "os" ) func main() { // Устанавливаем соединение с сервером conn, err := net.Dial("tcp", "localhost:8080") if err != nil { fmt.Println(err) return } defer conn.Close() // Читаем файл, который хотим скопировать file, err := os.Open("исходный_файл.txt") if err != nil { fmt.Println(err) return } defer file.Close() // Копируем данные из файла в сетевое соединение _, err = io.Copy(conn, file) if err != nil { fmt.Println(err) return } fmt.Println("Файл успешно отправлен.") } |
В этих примерах сервер принимает подключение от клиента на локальном адресе и порте 8080, создает файл "копия_файла.txt" и записывает в него все данные, которые приходят от клиента. Клиент устанавливает соединение с сервером, читает файл "исходный_файл.txt" и отправляет его данные по сети серверу.
@nelle
Приведенный вами код работает отлично для осуществления передачи файла по сети между клиентом и сервером на языке Go. В случае необходимости доработки или расширения функционала, можно добавить обработку ошибок, использовать буферизированное чтение и запись для более эффективной передачи данных, а также реализовать возможность передачи нескольких файлов или передачу файлов в обоих направлениях.
Если у вас есть какие-то конкретные требования или дополнительные вопросы по этой теме, не стесняйтесь задавать их.