60 lines
1.0 KiB
Go
60 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net"
|
|
"os"
|
|
)
|
|
|
|
// 服务器端接收文件的示例函数
|
|
func ReceiveFile(conn net.Conn, filename string, filesize int64) error {
|
|
file, err := os.Create(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
var received int64 = 0
|
|
buf := make([]byte, 4096)
|
|
for received < filesize {
|
|
n, err := conn.Read(buf)
|
|
if err != nil {
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
return err
|
|
}
|
|
file.Write(buf[:n])
|
|
received += int64(n)
|
|
}
|
|
fmt.Printf("文件 %s 接收完成,共 %d 字节\n", filename, received)
|
|
return nil
|
|
}
|
|
|
|
// 服务器端发送文件的示例函数
|
|
func SendFile(conn net.Conn, filepath string) error {
|
|
file, err := os.Open(filepath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
buf := make([]byte, 4096)
|
|
for {
|
|
n, err := file.Read(buf)
|
|
if err != nil {
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
return err
|
|
}
|
|
_, err = conn.Write(buf[:n])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
fmt.Printf("文件 %s 发送完成\n", filepath)
|
|
return nil
|
|
}
|