go語言的 net 包中有乙個 tcpconn 型別,可以用來建立 tcp 客戶端和 tcp 伺服器端間的通訊通道,tcpconn 型別裡有兩個主要的函式:
func (c *tcpconn) write(b byte) (n int, err os.error)
func (c *tcpconn) read(b byte) (n int, err os.error)
cpconn 可以用在客戶端和伺服器端來讀寫資料。
type tcpaddr struct
在go語言中通過 resolvetcpaddr 可以獲取乙個 tcpaddr 型別,resolvetcpaddr 的函式定義如下:
func resolvetcpaddr(net, addr string) (*tcpaddr, os.error)
引數說明如下:
我們可以通過 net 包來建立乙個伺服器端程式,在伺服器端我們需要繫結服務到指定的非啟用埠,並監聽此埠,當有客戶端請求到達的時候可以接收到來自客戶端連線的請求。
net 包中有相應功能的函式,函式定義如下
func listentcp(net string, laddr *tcpaddr) (l *tcplistener, err os.error)
func (l *tcplistener) accept() (c conn, err os.error)
listentcp 函式會在本地 tcp 位址 laddr 上宣告並返回乙個 *tcplistener,net 引數必須是 "tcp"、"tcp4"、"tcp6",如果 laddr 的埠欄位為 0,函式將選擇乙個當前可用的埠,可以用 listener 的 addr 方法獲得該埠。
案列:server
package main
import (
"fmt"
"net"
)func echo(c *net.tcpconn)
fmt.printf("讀取位元組數為%d\n", n)
fmt.printf(string(buf[:n])) }}
// server 表示伺服器端函式
func server()
listener, err := net.listentcp("tcp4", &address)
if err != nil
defer listener.close()
for
go echo(conn) }}
func main()
client
package main
import (
"bufio"
"fmt"
"log"
"net"
"os"
"strings"
)// client 表示客戶端函式
func client()
reader := bufio.newreader(os.stdin) 代表標準輸入[終端]
for
line = strings.trim(line, "\r\n")
if line == "exit"
conent, err := conn.write(byte(line + "\n"))
if err != nil
fmt.printf("客戶端傳送了 %d 位元組的資料到服務端\n", conent) }}
func main()
Go語言之網路程式設計
首先應該了解服務端和客戶端的處理流程 1 服務端處理流程 2 客戶端處理流程1 服務端 server.go package main import fmt net func processreq conn net.conn 3 顯示客戶端傳送的內容 fmt.print string buf m fu...
Go語言之GO 語言常量
相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...
Go語言之Go 語言迴圈語句
go 語言提供了以下幾種型別迴圈處理語句 迴圈型別 描述for 迴圈 重複執行語句塊 迴圈巢狀 在 for 迴圈中巢狀乙個或多個 for 迴圈 迴圈控制語句可以控制迴圈體內語句的執行過程。go 語言支援以下幾種迴圈控制語句 控制語句 描述break 語句 經常用於中斷當前 for 迴圈或跳出 swi...