没有区分好http和tcp的区别,在用go实现客户服务端的时候,一上来没意识到可以用http与tcp做的不同,在编程语言中,对这两种方式也有不同的包或者方法可供调用。
code source

server.go

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net"
  6. "strings"
  7. )
  8. func store(str []string) []bool {
  9. r := make([]bool, len(str)) // 如果直接定义数组 var arr [len(str)]是不行的,因为len(str)是变量,但是切片可以
  10. //未经处理,目前默认返回都是false
  11. return r
  12. }
  13. func process(conn net.Conn) {
  14. defer conn.Close()
  15. for {
  16. var buf [128]byte
  17. n, _ := conn.Read(buf[:])
  18. // n, err := conn.Read(buf[:])
  19. // if err != nil {
  20. // log.Fatal(err)
  21. // break
  22. // }
  23. data := string(buf[:n])
  24. strOriginalArray := strings.Split(data, "\n") //这个是真的好用,直接帮你返回的就是分割完成的string数组
  25. // 获得字典树判断的结果
  26. // store(strOriginalArray)
  27. // fmt.Println(store(strOriginalArray))
  28. // fmt.Printf("Receive :%s\n", data)
  29. fmt.Println(strOriginalArray)
  30. break
  31. }
  32. }
  33. func main() {
  34. listener, err := net.Listen("tcp", "0.0.0.0:9090")
  35. if err != nil {
  36. log.Fatal(err)
  37. return
  38. }
  39. for {
  40. // conn, _ := listener.Accept()
  41. conn, err := listener.Accept()
  42. if err != nil {
  43. fmt.Println("main方法中出错了", err)
  44. continue
  45. }
  46. go process(conn)
  47. }
  48. }

client.go

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net"
  6. )
  7. func main() {
  8. conn, err := net.Dial("tcp", "127.0.0.1:9090")
  9. if err != nil {
  10. log.Fatal(err)
  11. return
  12. }
  13. var strInput = []string{"hello", "this", "is", "a", "test", "and", "you", "can", "do", "it", "well",
  14. "hope", "that", "good", "luck"}
  15. for i := 0; i < len(strInput); i++ {
  16. _, err = conn.Write([]byte(strInput[i] + "\n"))
  17. if err != nil {
  18. fmt.Println("发送出错...", err)
  19. return
  20. }
  21. // fmt.Println(strInput[i]) //为啥打印这里的值会出错
  22. }
  23. fmt.Println("发送完毕了..")
  24. }

在输出打印服务端接收到的结果的时候,每次都不一样…
image.png
感觉还是基础上不够扎实啊..