没有区分好http和tcp的区别,在用go实现客户服务端的时候,一上来没意识到可以用http与tcp做的不同,在编程语言中,对这两种方式也有不同的包或者方法可供调用。
code source
server.go
package main
import (
"fmt"
"log"
"net"
"strings"
)
func store(str []string) []bool {
r := make([]bool, len(str)) // 如果直接定义数组 var arr [len(str)]是不行的,因为len(str)是变量,但是切片可以
//未经处理,目前默认返回都是false
return r
}
func process(conn net.Conn) {
defer conn.Close()
for {
var buf [128]byte
n, _ := 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 main
import (
"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("发送完毕了..")
}
在输出打印服务端接收到的结果的时候,每次都不一样…
感觉还是基础上不够扎实啊..