package main

import (
"fmt"
"os"
"net"
"io"
) //发送文件内容
func SendFile(path string,conn net.Conn){
//以只读的方式打开文件
f,err := os.Open(path)
if err != nil{
fmt.Println("os.Open err=",err)
return
} defer f.Close() buf := make([]byte,*)
for{
n,err := f.Read(buf)
if err !=nil{
if err == io.EOF{
fmt.Println("文件传输完毕")
}else{
fmt.Println(" f.Read err=",err)
}
return
}
//发送内容
conn.Write(buf[:n])
} } func main() {
//提示输入文件
fmt.Println("请输入需要传输的文件")
var path string
fmt.Scan(&path) //获取文件名 info.Name()
info,err := os.Stat(path) if err != nil{
fmt.Println("os.Stat err= ",err)
return
} //主动连接我们的服务器
conn,err := net.Dial("tcp","127.0.0.1:8000")
if err !=nil{
fmt.Println("net.Dial err=",err)
return
} //给接收方发送文件名
_,err = conn.Write([]byte(info.Name()))
if err != nil{
fmt.Println("conn.Write err =",err)
return
} var n int
buf := make([]byte,)
n,err = conn.Read(buf)
if err !=nil{
fmt.Println("conn.Read err=",err)
return
} if "ok"== string(buf[:n]){
//发送文件内容
SendFile(path,conn)
} }
package main

import (
"net"
"fmt"
"os"
"io"
)
//文件的接收操作
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,)
for{
n,err := conn.Read(buf) //接收对方发送过来的文件内容
if err != nil{
if err == io.EOF{
fmt.Println("文件接收完毕")
}else{
fmt.Println("conn.Read err=",err) }
return
}
if n == {
fmt.Println("n==0 文件接收完毕")
break
}
f.Write(buf[:n])
}
} func main() {
//监听
listernner,err := net.Listen("tcp","127.0.0.1:8000")
if err != nil{
fmt.Println("net.Listen err =",err)
return
}
defer listernner.Close()
//阻塞等待用户连接
conn,err := listernner.Accept()
if err != nil{
fmt.Println("listenner.Accept err=",err)
return
}
defer conn.Close() //缓冲
buf := make([]byte,) 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) }

go 接收发送文件的更多相关文章

  1. Smack+Openfire 接收和发送文件

    转载请注明出处:http://blog.csdn.net/steelychen/article/details/37958839 发送文件须要提供准确的接收放username称(例:user2@192 ...

  2. php发送 与接收流文件

    PHP 发送与接收流文件 sendStreamFile.php 把文件以流的形式发送 receiveStreamFile.php 接收流文件并保存到本地 sendStreamFile.php < ...

  3. httpurlconnection发送文件到服务端并接收

    httpurlconnection发送文件到服务端并接收 客户端 import java.io.DataInputStream; import java.io.File; import java.io ...

  4. [转]C#网络编程(订立协议和发送文件) - Part.4

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx 源码下载:http://www.trac ...

  5. android开发,socket发送文件,read阻塞,得不到文件尾-1

    这是我的接收文件代码:开始可以读取到-1,但是现在又读取不到了,所以才加上红色字解决的(注释的代码) File file = new File(mfilePath,"chetou." ...

  6. socket(TCP)发送文件

    一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.Componen ...

  7. C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口。

    最近接触了C#Socket网络编程,试着做了试试(*^__^*) 实现多个客户端和服务端互相发送消息 发送文件抖动窗口功能 服务端: using System; using System.Collec ...

  8. 高级UIKit-09(TCPSocket发送文件、上传和下载)

    [day1101_SocketSendFile]:发送文件到服务端 发送文件需要在该文件上拼接消息头,比如类型,文件名,文件大小 // 服务端 - (void)viewDidLoad { [super ...

  9. Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码

    主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: #include <stdio.h> #include <sys/types. ...

随机推荐

  1. SpringBootTest MockMVC绑定session(需要登陆的接口)

    https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testing spring-te ...

  2. python程序封装成exe流程

    在学习python的过程中,在IDE编写完成py项目,运行成功想要封装成exe,方便分享给不同的人即使别人没有安装python也可以使用. 封装的过程中遇到一些问题,记录一下,方便自己和他人查阅. 以 ...

  3. Noip2017Day2T2 宝藏

    题目链接 problem 有\(n\)个点,\(m\)条无向边,选择一个点开始开辟道路.开辟一条长度为\(L\)的链接\(u,v\)的道路会花费\(L \times K\),K表示从选择的最初点到\( ...

  4. 正则表达式中的.*?和python中re.S参数的详解

    本章的内容主要是为讲解在正则表达式中常用的.*?和re.S! 在正则表达式中有贪婪匹配和最小匹配:如下为贪婪匹配(.*) import re match = re.search(r'PY.*', 'P ...

  5. JavaScript判断对象和数组

    在调用后端接口时,由于后端接口的不规范统一,接口最外层在没有数据时返回的是空数组(其实更想要的是空json对象,接口返回的data数据应该统一返回json对象,便于扩展),而在有数据时返回的是json ...

  6. RAID 2.0 技术(块虚拟化技术)

    RAID 2.0 技术(块虚拟化技术) RAID 2.0 技术(块虚拟化技术),该技术将物理的存储空间划分为若干小粒度数据块,这些小粒度的数据块均匀的分布在存储池中所有的硬盘上,然后这些小粒度的数据块 ...

  7. .NET MVC5简介(六)HttpHandler

    浏览器到网站程序 上一篇中,介绍IHttpModule的时候,自定义一个类CustomHttpModule继承自IHttpModule,自定义一个事件,并配合配置文件,就可以执行自定义Module中的 ...

  8. C#窗体间常用的几种传值方式、以及委托与事件的详细介绍

    窗体间的传值,最好使用委托方式传值,开始之前,我们先来说一下委托与事件的关系. 委托:是一个类. 事件:是委托类型的一个特殊实例,只能在类的内部触发执行. 首先创建2个窗体,这里我们以form1为发送 ...

  9. CDN(Content Delivery Network)原理

    CDN即内容分发网络,一般包括分发服务系统,负载均衡系统和管理系统. 分发服务系统,其基本的工作单元就是各个cache服务器.负责直接响应用户请求,将内容快速分发到用户:同时还负责内容更新,保证和源站 ...

  10. 高强度学习训练第五天总结:JAVA对象+GC

    第五天了.. 理清了Java对象的创建过程,分配内存,线程安全性,对象头和对象的访问定位 理清了JVM GC的发展历史,算法,例如: 可达性分析 引用计数法 标记-清楚法 复制算法 标记-整理算法 分 ...