Go語言之Go語言網路程式設計

2022-09-07 07:51:11 字數 1796 閱讀 9437

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...