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位元組,完整的...