chat/chat_project/client/file_transfer.go

60 lines
1018 B
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
}