没有区分好http和tcp的区别,在用go实现客户服务端的时候,一上来没意识到可以用http与tcp做的不同,在编程语言中,对这两种方式也有不同的包或者方法可供调用。
code source
server.go
package mainimport ("fmt""log""net""strings")func store(str []string) []bool {r := make([]bool, len(str)) // 如果直接定义数组 var arr [len(str)]是不行的,因为len(str)是变量,但是切片可以//未经处理,目前默认返回都是falsereturn r}func process(conn net.Conn) {defer conn.Close()for {var buf [128]byten, _ := conn.Read(buf[:])// n, err := conn.Read(buf[:])// if err != nil {// log.Fatal(err)// break// }data := string(buf[:n])strOriginalArray := strings.Split(data, "\n") //这个是真的好用,直接帮你返回的就是分割完成的string数组// 获得字典树判断的结果// store(strOriginalArray)// fmt.Println(store(strOriginalArray))// fmt.Printf("Receive :%s\n", data)fmt.Println(strOriginalArray)break}}func main() {listener, err := net.Listen("tcp", "0.0.0.0:9090")if err != nil {log.Fatal(err)return}for {// conn, _ := listener.Accept()conn, err := listener.Accept()if err != nil {fmt.Println("main方法中出错了", err)continue}go process(conn)}}
client.go
package mainimport ("fmt""log""net")func main() {conn, err := net.Dial("tcp", "127.0.0.1:9090")if err != nil {log.Fatal(err)return}var strInput = []string{"hello", "this", "is", "a", "test", "and", "you", "can", "do", "it", "well","hope", "that", "good", "luck"}for i := 0; i < len(strInput); i++ {_, err = conn.Write([]byte(strInput[i] + "\n"))if err != nil {fmt.Println("发送出错...", err)return}// fmt.Println(strInput[i]) //为啥打印这里的值会出错}fmt.Println("发送完毕了..")}
在输出打印服务端接收到的结果的时候,每次都不一样…
感觉还是基础上不够扎实啊..
