sockt文件传输
Server: package main import ( "fmt" "io" "net" "os" ) //接收文件内容 func RecvFile(fileName string, conn net.Conn) { //新建一个文件 f, err := os.Create(fileName) if err != nil { fmt.Println("os.Create err = ", err) return } buf := make([]byte, 4*1024) for true { n, err := conn.Read(buf) //接收对方发过来的文件内容 if err != nil { if err == io.EOF { fmt.Println("文件接收完毕") break } else { fmt.Println("f.read err = ", err) return } } f.Write(buf[:n]) } } func main() { //监听 listener, err := net.Listen("tcp", ":8000") if err != nil { fmt.Println("net.Listen err = ", err) return } defer listener.Close() conn, err := listener.Accept() if err != nil { fmt.Println("listener.Accept err = ", err) return } //读取文件名 buf := make([]byte, 1024) var n int n, err = conn.Read(buf) if err != nil { fmt.Println("conn read err = ", err) return } fileName := string(buf[:n]) //回复OK conn.Write([]byte("ok")) //接收文件内容 RecvFile(fileName, conn) } Client: package main import ( "fmt" "io" "net" "os" ) //发送文件内容 func SendFile(path string, conn net.Conn) { //以只读方式打开文件 f, err := os.Open(path) if err != nil { fmt.Println("open file err = ", err) return } defer f.Close() //核心功能,读多少就发送多少 buf := make([]byte, 2048) for true { n, err := f.Read(buf) if err != nil { if err == io.EOF { fmt.Println("文件发送完毕") return } else { fmt.Println("f.read err = ", err) return } } //给服务器发送内容 conn.Write(buf[:n]) } } func main() { //提示输入文件 fmt.Println("请输入需要传输的文件:") var path string fmt.Scan(&path) //获取文件名 info, err := os.Stat(path) if err != nil { fmt.Print("获取文件名err = ", err) return } //文件连接服务器 conn, err1 := net.Dial("tcp", ":8000") if err1 != nil { fmt.Println("net.Dial err = ", err1) return } defer conn.Close() //给接收方发送文件名 _, err = conn.Write([]byte(info.Name())) if err != nil { fmt.Println("conn.Write err = ", err) return } buf := make([]byte, 1024) n, err := conn.Read([]byte(buf)) if err != nil { fmt.Println("conn.Read err = ", err) } if "ok" == string(buf[:n]) { fmt.Println("开始发送文件了") //发送文件 SendFile(path, conn) } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2015-11-24 Centos7 设置IPtables