Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.37 KB | None | 0 0
  1. ///////////CLIENT GO
  2. package main
  3.  
  4. import (
  5. "bufio"
  6. "flag"
  7. "fmt"
  8. "io"
  9. "io/ioutil"
  10. "log"
  11. "net"
  12. "os"
  13. "servers/fileExchange/pkg/operations"
  14. "strings"
  15. )
  16.  
  17. var cmd = flag.String("cmd", "download", "command:")
  18.  
  19. var arg = flag.String("file", "l2.bot", "file name:")
  20.  
  21. func main() {
  22. const addr = "localhost:9999"
  23. log.Printf("client try connecting to: %s", addr)
  24. dial, err := net.Dial("tcp", addr)
  25. if err != nil {
  26. log.Fatalf("can't dial to: %s, it error: %v", addr, err)
  27. }
  28. log.Printf("client connected to %s", addr)
  29. client(dial)
  30. }
  31.  
  32. func client(dial net.Conn) {
  33. defer func() {
  34. err := dial.Close()
  35. if err != nil {
  36. log.Printf("can't close connect , it error: %v", err)
  37. }
  38. }()
  39. flag.Parse()
  40. *cmd = strings.ToLower(*cmd)
  41. switch *cmd {
  42. case "download":
  43. {
  44. err := downloadClient(dial, *cmd)
  45. if err != nil {
  46. log.Printf("can't download file from server, it error: %v", err)
  47. }
  48. }
  49. case "upload":
  50. {
  51. err := uploadClient(dial, *cmd)
  52. if err != nil {
  53. log.Printf("can't upload file from client: %v", err)
  54. }
  55. }
  56. case "list":
  57. {
  58. err := listClient(dial, *cmd)
  59. if err != nil {
  60. log.Printf("can't get files list from server: %v", err)
  61. }
  62. }
  63. default:
  64. fmt.Printf("incorrect command: %s\n", *cmd)
  65. return
  66. }
  67. }
  68.  
  69. func downloadClient(dial net.Conn, cmd string) (err error) {
  70. cmd = cmd + ":"
  71. cmd = cmd + *arg
  72. cmdSend := bufio.NewWriter(dial)
  73. log.Printf("try send command to server: %s: ", cmd)
  74. err = operations.WriteLine(cmd, cmdSend)
  75. if err != nil {
  76. log.Printf("can' t send command: %s, to server, error: %v", cmd, err)
  77. return err
  78. }
  79. log.Println("command send success")
  80. log.Printf("try download file: %s from server", *arg)
  81. reader := bufio.NewReader(dial)
  82. line, err := operations.ReadLine(reader)
  83. if err != nil {
  84. log.Printf("can't read: %v", err)
  85. return err
  86. }
  87. bytes, err := ioutil.ReadAll(reader)
  88. if err != nil {
  89. if err != io.EOF {
  90. log.Printf("can't read data: %v", err)
  91. return err
  92. }
  93. }
  94. check := line
  95. log.Printf("check file: %s exist in server", *arg)
  96. if check == "error file not found\n" {
  97. log.Printf("file: %s is not exist in server", *arg)
  98. return err
  99. }
  100. log.Printf("file: %s exist in server", *arg)
  101. downloadDir := "./download/"
  102. log.Printf("check dir status")
  103. _, err = os.Stat(downloadDir)
  104. if err != nil {
  105. log.Printf("try create directory to save: %s", downloadDir)
  106. err := operations.MkDir(downloadDir)
  107. if err != nil {
  108. log.Printf("can't create directory: %s, error: %v", downloadDir, err)
  109. return err
  110. }
  111. log.Printf("create directory success: %s", downloadDir)
  112. }
  113. log.Printf("download file size by bytes: %d", len(bytes))
  114. downloadFile := downloadDir + *arg
  115. log.Printf("try create file: %s", *arg)
  116. file, err := os.OpenFile(downloadFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
  117. if err != nil {
  118. log.Printf("can't create file: %s, error: %v", *arg, err)
  119. return err
  120. }
  121. defer func() {
  122. err = file.Close()
  123. if err != nil {
  124. log.Printf("can't close file: %v", err)
  125. return
  126. }
  127. }()
  128. log.Printf("create file: %s success", *arg)
  129. log.Printf("try write to file: %s", *arg)
  130. _, err = file.Write(bytes)
  131. if err != nil {
  132. log.Printf("can't write to file: %s, error: %v", *arg, err)
  133. return err
  134. }
  135. log.Printf("file: %s, download success!", *arg)
  136. return nil
  137. }
  138.  
  139. func uploadClient(dial net.Conn, cmd string) (err error) {
  140. log.Printf("You need have directory \"upload\" and put there your files.")
  141. cmd = cmd + ":"
  142. cmd = cmd + *arg
  143. cmdSend := bufio.NewWriter(dial)
  144. log.Printf("try send command to server: %s: ", cmd)
  145. err = operations.WriteLine(cmd, cmdSend)
  146. if err != nil {
  147. log.Printf("can' t send command: %s, to server, error: %v", cmd, err)
  148. return err
  149. }
  150. log.Println("command send success")
  151. log.Printf("try upload file: %s to server", *arg)
  152. writer := bufio.NewWriter(dial)
  153. err = operations.WriteLine("upload: ok", writer)
  154. if err != nil {
  155. log.Printf("error while writing: %v", err)
  156. return err
  157. }
  158. *arg = strings.TrimSuffix(*arg, "\n")
  159. uploadDir := "./upload/"
  160. uploadFile := uploadDir + *arg
  161. file, err := os.Open(uploadFile)
  162. if err != nil {
  163. log.Printf("can't find file: %s, it error: %v", *arg, err)
  164. _ = operations.WriteLine("error", writer)
  165. return err
  166. }
  167. log.Printf("try copy file: %s, from directory: %v", *arg, uploadDir)
  168. byteFile, err := io.Copy(writer, file)
  169. if err != nil {
  170. log.Printf("can't copy file: %s, it error: %v", *arg, err)
  171. return err
  172. }
  173. log.Printf("copy file: %s, size by bytes: %d", *arg, byteFile)
  174. log.Printf("file copy success")
  175. log.Printf("file: %s send to server success", *arg)
  176. return nil
  177. }
  178.  
  179. func listClient(dial net.Conn, cmd string) (err error) {
  180. cmd = cmd + ":"
  181. cmdSend := bufio.NewWriter(dial)
  182. log.Printf("try send command to server: %s", cmd)
  183. err = operations.WriteLine(cmd, cmdSend)
  184. if err != nil {
  185. log.Printf("can't send command: %s to server", cmd)
  186. return err
  187. }
  188. log.Println("command send success")
  189. log.Println("try get files list from server")
  190. reader := bufio.NewReader(dial)
  191. _, err = operations.ReadLine(reader)
  192. if err != nil {
  193. log.Printf("can't read: %v", err)
  194. return err
  195. }
  196. bytes, err := ioutil.ReadAll(reader)
  197. if err != nil {
  198. if err != io.EOF {
  199. log.Printf("can't read data: %v", err)
  200. return err
  201. }
  202. return err
  203. }
  204. log.Printf("available files:\n%s\n", string(bytes))
  205. return nil
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement