通訊過程Socket程式設計

2021-08-26 20:43:45 字數 1966 閱讀 3183

c/s模式

瀏覽器(browser)/伺服器(server)模式。只需在一端部署伺服器,而另外一端使用每台pc都預設配置的瀏覽器即可完成資料的傳輸。

優缺點

簡單的c/s模型通訊

server端:

listen函式:

func listen(network, address string) (listener, error)

network:選用的協議:tcp、udp, 如:「tcp」或 「udp」

address:ip位址+埠號, 如:「127.0

.0.1:8000」或 「:8000」

listener 介面:

type

listener inte***ce

conn 介面:

type

conn inte***ce

參看 中文幫助文件中的demo:

示例**:

tcp伺服器.go

package main

import (

"net"

"fmt"

)func main()

defer listener.close() // 主協程結束時,關閉listener

fmt.println("伺服器等待客戶端建立連線...")

// 等待客戶端連線請求

conn, err := listener.accept()

if err != nil

defer conn.close() // 使用結束,斷開與客戶端鏈結

fmt.println("客戶端與伺服器連線建立成功...")

// 接收客戶端資料

buf := make(byte,1024) // 建立1024大小的緩衝區,用於read

n, err := conn.read(buf)

if err != nil

fmt.println("伺服器讀到:", string(buf[:n])) // 讀多少,列印多少。

}

如圖,在整個通訊過程中,伺服器端有兩個socket參與進來,但用於通訊的只有 conn 這個socket。它是由 listener建立的。隸屬於伺服器端。

client 端:

func dial(network, address string) (conn, error)

network:選用的協議:tcp、udp,如:「tcp」或 「udp」

.108

.11:8000」或 「www.itcast.cn:8000」

conn 介面:

type

conn inte***ce

客戶端實現

package main

import (

"net"

"fmt"

)func main()

defer conn.close() // 結束時,關閉連線

// 傳送資料

_, err = conn.write(byte("are u ready?"))

if err != nil

}

下一章節將講解一下併發模型的伺服器,以及tcp通訊過程,還有udp伺服器的講解;

Socket通訊過程

伺服器端 accept 以同步方式從偵聽套接字的連線請求佇列中提取第乙個掛起的連線請求,然後建立並返回新的socket。不能使用返回的這個 socket 接受連線佇列中的任何附加連線。然而,可以呼叫返回的 socket 的remoteendpoint 方法來標識遠端主機的網路位址和埠號。在阻止模式中...

socket通訊過程

一 網路位元組序與主機位元組序 1 主機位元組序 就是自己的主機內部,記憶體中資料的儲存順序,可以分為兩種 2 網路位元組序 大端位元組序即網路位元組序 3 資料傳輸過程 a的固有資料儲存 標準化 轉化成b的固有格式 iia的主機位元組序 網路位元組序 b的主機位元組序 標準化原因 不同的cpu有不...

socket通訊程式設計

1 socket通訊模型如下 應用程式通過套接字可以進行通訊,可以使用udp協議或者使用tcp協議,當客戶端和伺服器端的協議時相對應的,客戶端使用tcp,那麼伺服器端使用tcp 2 udp協議 把資料打包成資料報,然後直接傳送對應的ip位址,速度快,但是不保證 成功率,並且資料大小有限 tcp協議 ...