tcp 工作在網路的傳輸層,它屬於一種面向連線的可靠的通訊協議。
tcp 伺服器的工作過程:
tcp 伺服器首先註冊乙個公知埠,然後呼叫 listen() 函式在這個埠上建立乙個 tcplistener 監聽物件,並在該物件上監聽客戶機的連線請求。
啟用 tcplistener 物件的 accept() 方法接收客戶機的連線請求,並返回乙個協議相關的 conn 物件,這裡就是 tcpconn 物件。
如果返回了乙個新的 tcpconn 物件,伺服器就可以呼叫該物件的 read() 方法接收客戶機發來的資料,或者呼叫 write() 方法向客戶機傳送資料了。
package mainimport( "server")func main()
package serverimport ( "log" "net" "os")type server struct func newserver(address string) *server}// 開啟tcp服務func (this *server) start() go handleconnection(conn); }}// 連線接收func handleconnection(conn net.conn) input := bufio.newscanner(conn) for input.scan() }func checkerror(err error) }
客戶端的工作過程如下:
tcp 客戶機在獲取了伺服器的服務埠號和服務位址之後,可以呼叫 dialtcp() 函式向伺服器發出連線請求,如果請求成功會返回 tcpconn 物件。
客戶機呼叫 tcpconn 物件的 read() 或 write() 方法,與伺服器進行通訊活動。
通訊完成後,客戶機呼叫 close() 方法關閉連線,斷開通訊鏈路。
package mainimport( "fmt" "net" "os")func main() service := os.args[1] tcpaddr, err := net.resolvetcpaddr("tcp", service) checkerror(err) conn, err := net.dialtcp("tcp", nil, tcpaddr) checkerror(err) raddr := conn.remoteaddr() n, err := conn.write(byte("hello server")) checkerror(err) n, err = conn.read(buf[0:]) checkerror(err) fmt.println("reply form server", raddr.string(), string(buf[0:n])) conn.close() os.exit(0)}func checkerror(err error) }
Go語言之GO 語言常量
相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...
五 go語言特性 go語言筆記
defer 呼叫乙個被 defer 的函式時在函式剛要返回之前延遲執行,當函式無論怎樣返回,某資源必須釋放時,可用這種與眾不同 但有效的處理方式。傳統的例子包括解鎖互斥或關閉檔案。package main import log func main mydefer func mydefer func ...
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...