最近,將go語言的基礎學習了一遍,感覺還得多練練才能拿得動這門語言;
在tcp通訊程式設計基礎上,將一些雜七雜八的東西(channel/defer/range/routinue/select/switch)都添進去tcp server端,tcp client端還保留比較原始的部分;
tcp基礎就不介紹了,直接上**,**是有些問題,不妨礙知識點的應用和理解
tcp server端
package main
import (
"fmt"
"net"
"strings"
// "time"
)var exit_all = make(chan string)
func recv_msg(conn net.conn, quit chan<- int) ()
for
data := string(recv_buf[:lenght])
if strings.equalfold(data, "quit") else }}
func send_msg(conn net.conn, quit chan<- int, exit chan<- int) ()
for
_, err := conn.write(send_buf) //向伺服器傳送資料
if err != nil }}
func close_msg(conn net.conn, quit <-chan int, exit <-chan int) }}
func accept_conn(listener net.listener)
fmt.println("connect successfunlly!")
quit, exit := make(chan int), make(chan int)
go recv_msg(conn, quit)
go send_msg(conn, quit, exit)
go close_msg(conn, quit, exit) }}
func main()
go accept_conn(listener)
for v := range exit_all
}
tcp client端
package main
import (
"fmt"
"net"
"strings"
)func send_msg(conn net.conn, quit chan int) }}
func recv_msg(conn net.conn, quit chan int)
data = string(recv_buf[0:lenght]) //這裡若不用leng,取到的data長度將會是1024
fmt.printf("\rserver:%s", data) //伺服器傳送的內容
fmt.printf("\rclient:")
} conn.close()
quit <- 0
fmt.println("server is disconnected")
}func main()
fmt.println("if you want to exit,please input quit")
go send_msg(conn, quit) //傳送訊息
go recv_msg(conn, quit) //接收訊息
<-quit
}
go語言網路程式設計之tcp
go語言網路程式設計之tcp go語言網路程式設計需要匯入包 net如下 import fmt net 重要函式 func listen net,laddr string listener,error func accept cconn,errerror func read b byte n int...
go語言網路程式設計
go語言的defer,你真的懂了嗎?這篇文章通過幾個生動的例子闡述了go語言當中return的執行順序和原理,也解答了為什麼defer明明執行在return之前,但是看起來卻是在return之後進行的 package main import net fmt func main else else e...
Go語言之Go語言網路程式設計
go語言的 net 包中有乙個 tcpconn 型別,可以用來建立 tcp 客戶端和 tcp 伺服器端間的通訊通道,tcpconn 型別裡有兩個主要的函式 func c tcpconn write b byte n int,err os.error func c tcpconn read b byt...