go語言標準包之TCP

2021-10-03 15:07:28 字數 1582 閱讀 1472

1.tcpconn

在tcp連線中,服務端是乙個標準的listen和accept結構

在net包中有乙個tcpconn類,用它來作為客戶端和伺服器互動的通道

func (c *tcpconn) write(b byte) (n int, err os.error)

func (c *tcpconn) read(b byte) (n int, err os.error)

通過tcpconn的write和read來實現在客戶端和伺服器之間讀寫資料

那麼怎樣獲得乙個位址呢?

func resolvetcpaddr(net, addr string) (*tcpaddr, os.error),返回乙個tcpaddr的結構指標

對於reslovetcpaddr中的net可以選擇tcp4 tcp6或tcp;;addr表示的是伺服器的url或者ip位址

獲取完位址後,需要建立tcp監聽

net.listentcp(「tcp」, tcpaddr) 引數分別為net和位址

然後就可以獲取tcp連線

tcplistener.accepttcp() 返回的是乙個tcpcoon型別,通過read和write讀取資料

package main

import

("fmt"

"net"

"os"

)func

main()

fmt.

println

("a client connected : "

+ tcpconn.

remoteaddr()

.string()

) b:=

make([

]byte

,1024

) tcpconn.

read

(b) a,

_:=os.

create

("./pengpeng.txt"

) a.

write

(b) a.

close()

}}

通過這個例子我們可以把請求頭寫到檔案裡面

而對於客戶端,我們剛剛說過需要通過dail來進行連線

還是一樣的,我們需要先獲取tcpaddr

tcpaddr, _ = net.resolvetcpaddr(「tcp」, 「127.0.0.1:999」)

然後建立連線

conn, err := net.dialtcp(「tcp」, nil, tcpaddr)

然後在對conn的資訊進行處理

package main

import

("fmt"

"net"

"os"

)func

main()

defer conn.

close()

fmt.

println

(conn.

localaddr()

.string()

+" : client connected!"

)}

GO標準包之fmt log

在fmt包中,主要是輸入和輸出 對於輸出 print 有三大類 pringf fprintf sprintf print fprint sprint println fprintln sprintln 通過書寫可以看出 第一行的按照格式化文字輸出內容 第二行輸出時不會換行 第三行的會換行 而第一列的...

23 Go語言標準庫之time包

時間和日期是我們程式設計中經常會用到的,本文主要介紹了go語言內建的time包的基本用法。time包提供了時間的顯示和測量用的函式。日曆的計算採用的是公曆。time.time型別表示時間。我們可以通過time.now 函式獲取當前的時間物件,然後獲取時間物件的年月日時分秒等資訊。示例 如下 func...

GO語言手動處理TCP粘包

大部分tcp通訊場景下,使用自定義通訊協議 粘包處理原理 通過請求頭中資料報大小,將客戶端n次傳送的資料緩衝到乙個資料報中例如 請求頭佔3個位元組 指令頭1位元組 資料報長度2位元組 版本佔1個位元組,指令佔2個位元組 協議規定乙個資料報最大是512位元組,請求頭中資料報記錄是1300位元組,完整的...