SetDeadline對客戶端與伺服器作用不同

2021-09-17 20:58:20 字數 1344 閱讀 4526

對於客戶端setdeadline基本上只在讀取資料超時起作用,會導致超時錯誤

package main

import (

"fmt"

"net"

"time"

)const recv_buf_len = 1024

func main()

defer conn.close()

buf := make(byte, recv_buf_len)

for i := 0; i < 1000; i++

t:=time.now()

conn.setdeadline(t.add(1*time.second))//3s

//準備要傳送的字串

msg := fmt.sprintf("hello world, %03d", i)

n, err := conn.write(byte(msg))

if err != nil

fmt.println("傳送", msg)

//從伺服器端收字串

n, err = conn.read(buf)

if err != nil

fmt.println("接收", string(buf[0:n]))

if err := conn.setreaddeadline(time.time{}); err != nil

//等一秒鐘

time.sleep(5*time.second)

fmt.println("本地ip+埠", conn.localaddr().string())

}}

傳送 hello world, 000

read buffer error: read tcp 127.0.0.1:60025->127.0.0.1:8888: i/o timeout

傳送 hello world, 001

read buffer error: read tcp 127.0.0.1:60025->127.0.0.1:8888: i/o timeout

傳送 hello world, 002

read buffer error: read tcp 127.0.0.1:60025->127.0.0.1:8888: i/o timeout

傳送 hello world, 003

read buffer error: read tcp 127.0.0.1:60025->127.0.0.1:8888: i/o timeout

傳送 hello world, 004

伺服器端不傳送資料,但這種能情況下不會重新撥號,conn沒有丟失。那麼如何重播號-----conn=nil//放在continue前面

瘦客戶端 胖客戶端 智慧型客戶端

胖客戶端模式將應用程式處理分成了兩部分 由使用者的桌面計算機執行的處理和最適合乙個集中的伺服器執行的處理。乙個典型的胖客戶端包含乙個或多個在使用者的pc上執行的應用程式,使用者可以檢視並運算元據 處理一些或所有的業務規則 同時提供乙個豐富的使用者介面做出響應。伺服器負責管理對資料的訪問並負責執行一些...

胖客戶端 瘦客戶端和富客戶端

以c s結構開發的網路應用程式,需要為客戶端開發專用的客戶端軟體,相對而言其客戶端比較龐大,在客戶端可以實現很多功能,分擔伺服器的負擔,屬於胖客戶端型別。以b s結構開發的web應用,其客戶端只是乙個瀏覽器,所有業務邏輯由伺服器端進行處理,相對而言客戶端比較瘦小,故稱為瘦客戶端。目前比較流行的一種開...

非同步客戶端和同步客戶端

先寫下我的理解,方便後邊閱讀資料校驗。一 同步客戶端 比如乙個連線有兩個請求,請求1 和 請求2,請求1 先發起請求,請求2後發起請求,則請求2 要等待請求1 響應完成才能接收到響應。舉個棗子,httpclient 傳送get請求,執行緒會一致阻塞,直到有響應結果。二 非同步客戶端 比如乙個連線有兩...