GO語言網路程式設計之TCP v1

2021-07-10 14:55:52 字數 1820 閱讀 1765

最近,將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...