├── client ├── aFile └── main.go ├── server ├── file2 └── main.go └── utils └── error.go /client/aFile: -------------------------------------------------------------------------------- 1 | hello 2 | from 3 | client 4 | -------------------------------------------------------------------------------- /server/file2: -------------------------------------------------------------------------------- 1 | hello 2 | from 3 | server 4 | -------------------------------------------------------------------------------- /utils/error.go: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | ) 7 | 8 | func CheckError(err error) { 9 | if err != nil { 10 | fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) 11 | os.Exit(1) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /client/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "net" 5 | "os" 6 | "io" 7 | "net_test/utils" 8 | ) 9 | 10 | func main() { 11 | srcFile := "./aFile" 12 | dstFile := "./file1" 13 | serverAddr := "localhost:4040" 14 | uploadFile(srcFile, serverAddr) 15 | downloadFile(dstFile, serverAddr) 16 | } 17 | 18 | func uploadFile(srcFile, serverAddr string) { 19 | // connect to server 20 | conn, err := net.Dial("tcp", serverAddr) 21 | utils.CheckError(err) 22 | defer conn.Close() 23 | 24 | // open file to upload 25 | fi, err := os.Open(srcFile) 26 | utils.CheckError(err) 27 | defer fi.Close() 28 | 29 | // upload 30 | _, err = io.Copy(conn, fi) 31 | utils.CheckError(err) 32 | } 33 | 34 | func downloadFile(dstFile, serverAddr string) { 35 | // create new file to hold response 36 | fo, err := os.Create(dstFile) 37 | utils.CheckError(err) 38 | defer fo.Close() 39 | 40 | // connect to server 41 | conn, err := net.Dial("tcp", serverAddr) 42 | utils.CheckError(err) 43 | defer conn.Close() 44 | 45 | _, err = io.Copy(fo, conn) 46 | utils.CheckError(err) 47 | } 48 | -------------------------------------------------------------------------------- /server/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "net" 5 | "os" 6 | "io" 7 | "net_test/utils" 8 | ) 9 | 10 | func main() { 11 | dstFile := "./bFile" 12 | srcFile := "./file2" 13 | serverAddr := "localhost:4040" 14 | 15 | // server start listenning 16 | server, err := net.Listen("tcp", serverAddr) 17 | utils.CheckError(err) 18 | defer server.Close() 19 | 20 | recieveFile(server, dstFile) 21 | sendFile(server, srcFile) 22 | } 23 | 24 | func recieveFile(server net.Listener, dstFile string) { 25 | // accept connection 26 | conn, err := server.Accept() 27 | utils.CheckError(err) 28 | 29 | // create new file 30 | fo, err := os.Create(dstFile) 31 | utils.CheckError(err) 32 | defer fo.Close() 33 | 34 | // accept file from client & write to new file 35 | _, err = io.Copy(fo, conn) 36 | utils.CheckError(err) 37 | } 38 | 39 | func sendFile(server net.Listener, srcFile string) { 40 | // accept connection 41 | conn, err := server.Accept() 42 | utils.CheckError(err) 43 | 44 | // open file to send 45 | fi, err := os.Open(srcFile) 46 | utils.CheckError(err) 47 | defer fi.Close() 48 | 49 | // send file to client 50 | _, err = io.Copy(conn, fi) 51 | utils.CheckError(err) 52 | } 53 | --------------------------------------------------------------------------------