发送端
package main
import (
"fmt"
"os"
"net"
"io"
)
func SendFile(path string, connect net.Conn){
file, oerr :=os.Open(path)
if oerr !=nil{
fmt.Println("Open", oerr)
return
}
defer file.Close()
buff := make([]byte,1024*4)
for{
size, rerr := file.Read(buff)
if rerr != nil{
if rerr == io.EOF{
fmt.Println("EOF",rerr)
}else{
fmt.Println("Read:", rerr)
}
return
}
connect.Write(buff[:size])
}
}
func main(){
fmt.Print("请输入需要传输的文件路径:")
var path string
fmt.Scan(&path)
info, serr :=os.Stat(path)
if serr !=nil{
fmt.Println("Stat", serr)
return
}
connect, derr :=net.Dial("tcp","127.0.0.1:10240")
if derr !=nil{
fmt.Println("Dial", derr)
return
}
_,werr:= connect.Write([]byte(info.Name()))
if werr!=nil{
fmt.Println("Write",werr)
return
}
buff := make([]byte,4096)
size,rerr := connect.Read(buff)
if rerr!=nil{
fmt.Println("Read",rerr)
return
}
if "ok" == string(buff[:size]){
SendFile(path, connect)
}
defer connect.Close()
}
接收端
package main
import (
"net"
"fmt"
"os"
"io"
)
func ReadFile(fileName string, connect net.Conn) {
file, ferr := os.Create(fileName)
if ferr != nil {
fmt.Println("Create", ferr);
return
}
buff := make([]byte, 1024*4)
for {
size, rerr := connect.Read(buff)
if rerr != nil {
if rerr == io.EOF {
fmt.Println("EOF",rerr)
} else {
fmt.Println("Read", rerr)
}
return
}
file.Write(buff[:size])
}
}
func Response(connect net.Conn) {
defer connect.Close()
buff := make([]byte, 1024*4)
size, rerr := connect.Read(buff)
if rerr != nil {
fmt.Println("Read", rerr)
return
}
fileName := string(buff[:size])
connect.Write([]byte("ok"))
ReadFile(fileName, connect)
}
func main() {
//监听
listen, lerr := net.Listen("tcp", "127.0.0.1:10240")
if lerr != nil {
fmt.Println("Listen", lerr)
return
}
fmt.Println("等待客户端发送文件")
for {
connect, cerr := listen.Accept()
if cerr != nil {
fmt.Println("Accept", cerr)
return
}
go Response(connect);
}
defer listen.Close()
}