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. javaee和javase的区别

    JavaEE是指Java Enterprise Edition,Java企业版,多用于企业级开发,包括web开发等等.也叫J2EE. JavaSE通常是指Java Standard Edition,J ...

  2. iOS: 创建静态库,实现自己的API私有使用

    一.介绍 在开发中经常使用到第三方的静态框架,格式基本上就是.framework和.a格式的.使用时,会发现我们只能使用无法修改,这就是静态框架的一个好处,私有性.内部实现的代码只有公开者本人知晓,对 ...

  3. 实用小工具:VNC的安装

    安装xen时,需要使用vnc工具来进行图形化安装,安装好后启动失败,试了很多办法,最终解决. 1.使用yum安装:yum install tigervnc-server tigervnc-server ...

  4. Jenkins操作学习 -- 配置及使用

    一.jenkins基本配置 1.在Jenkins首页,点击Manage Jenkins,然后再点击Manage Plugins插件管理,安装必要的插件.这里我只需要安装Git,因为第一次初始化安装没成 ...

  5. Long类型数据前端精度丢失

    问题描述 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况.例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440 相 ...

  6. 直接命令行中执行PHP代码(PHP CLI模式)

    一般执行PHP代码,需要把PHP代码写成一个文件,但是有时候查一些PHP配置没有这个必要,能不能直接执行PHP代码呢? 答案是可以的. 在命令行下,采用CLI方式执行PHP代码,这里列出几个常用的命令 ...

  7. Javascript模块化开发4——Grunt常用模块

    一.copy 用于复制文件与目录. grunt-contrib-copy 二.eslint 检测代码的合理性. grunt-eslint 常见参数: 1.quiet 是否只显示errors.默认值fa ...

  8. php-laravel框架用户验证(Auth)模块解析(一)

    一.初始化 使用php artisan命令进行初始化:php artisan make:auth 和 php artisan migrate(该命令会生成users表.password_resets表 ...

  9. 创 PHP RSA2 签名算法

        什么是RSA2 ? RSA2 是在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签名算法. 该算法比SHA1WithRSA有更强的安全能力. 为了您的应用安 ...

  10. Linux常用命令之网络命令

    write命令 write命令用于向指定登录用户终端上发送信息.通过write命令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write命令就会将信息传给对方.如果接收信息 ...