golang socket 斷點續傳

2021-09-20 07:33:28 字數 2210 閱讀 6319

客戶端傳送訊息詢問服務端,你上次接收到的檔案內容位置

服務端告訴客戶端上次接收到的檔案內容位置

客戶端就從上次斷點的位置繼續傳送檔案內容

客戶端傳送檔案內容完畢後通知服務端,然後斷開連線

下面我們看看**的實現

服務端// file name: server.go

package main

import (

"os"

"io"

"net"

"log"

"strconv"

// "time"

)// 獲取已接收內容的大小

// (斷點續傳需要把已接收內容大下通知客戶端從**開始傳送檔案內容)

func getfilestat() int64

log.fatalf("get file stat faild: %s\n", err)

}log.printf("file size: %d\n", fileinfo.size())

return fileinfo.size() 

}func serverconn(conn net.conn)

log.fatalf("server read faild: %s\n", err)

}log.printf("recevice %d bytes, content is 【%s】\n", n, string(buf[:n]))

// 判斷客戶端傳送過來的訊息

// 如果是』start-->『則表示需要告訴客戶端從**開始讀取檔案資料傳送

switch  string(buf[:n])

continue

case "<--end":

// 如果接收到客戶端通知所有檔案內容傳送完畢訊息則退出

log.fatalf("receive over\n")

return

// default:

//     time.sleep(time.second * 1)

}// 把客戶端傳送的內容儲存到檔案

writefile(buf[:n])}}

func main()

defer l.close()

log.println("waiting accept.")

// 允許客戶端連線,在沒有客戶端連線時,會一直阻塞

conn, err := l.accept()

if err != nil

serverconn(conn)

}客戶端

// file name: client.go

package main

import (

"os"

"io"

"net"

"log"

"time"

"strconv"

)// 獲取服務端傳送的訊息

func clientread(conn net.conn) int

// string conver int

off, err := strconv.atoi(string(buf[:n]))

if err != nil

return off

}// 傳送訊息到服務端

func clientwrite(conn net.conn, data byte)

log.printf("send 【%s】 content success\n", string(data))

}// client conn

func clientconn(conn net.conn)

defer fp.close()

// set file seek

// 設定從**開始讀取檔案內容

_, err = fp.seek(int64(off), 0)

if err != nil

log.printf("read file at seek: %d\n", off)

for

log.fatalf("read file err: %s\n", err)

}// 傳送檔案內容到服務端

clientwrite(conn, data[:n])}}

func main()

clientconn(conn)

}實際應用的注意事項:

可限時記錄未上傳完的檔案,過時刪除,也可通過某個操作限制未上傳完的檔案儲存時間。

上傳完成的檔案要將檔名更改避免檔名重複

scrapy 斷點續爬

第一步 安裝berkeleydb資料庫 第二部 pip install bsddb3 第三部 pip install scrapy deltafetch 第四部 settings.py設定 spider middlewares deltafetch enabled true deltafetch e...

golang socket程式設計

go語言中通過net包中的dialtcp函式來建立乙個tcp連線,並返回乙個tcpconn型別的物件,當連線建立時伺服器端也建立乙個同型別的物件,此時客戶端和伺服器端通過各自擁有的tcpconn物件來進行資料交換。一般而言,客戶端通過tcpconn物件將請求資訊傳送到伺服器端,讀取伺服器端響應的資訊...

http range實現斷點續傳(斷點續載)

使用http range實現斷點續傳 伺服器端 響應的格式是 記錄檔案大小 long pastlength 0 int rangeswitch 0 long tolength 0 long contentlength 0 客戶端請求的位元組總量 string rangebytes 記錄客戶端傳來的形...