当前位置: 首页 > news >正文

怎么样建一个网站百度推广官网电话

怎么样建一个网站,百度推广官网电话,建站免费建站平台,网站建站策划在上一篇文章中,我们详细探讨了FTransferor文件传输工具的设计与实现,并展示了它在局域网文件传输方面的高效性。然而,随着互联网应用场景的不断丰富,传统的基于 TCP/UDP 的传输方式已经无法满足部分开发者的需求。特别是在跨平台…

在上一篇文章中,我们详细探讨了FTransferor文件传输工具的设计与实现,并展示了它在局域网文件传输方面的高效性。然而,随着互联网应用场景的不断丰富,传统的基于 TCP/UDP 的传输方式已经无法满足部分开发者的需求。特别是在跨平台、跨网络传输场景中,对 HTTP 协议的支持变得尤为重要。因此,本篇文章将围绕 FTransferor 的优化改造,为其增加 HTTP 协议支持,并提升其在复杂网络环境下的适用性。

为什么要支持 HTTP 协议?

HTTP 是一种通用性极强的传输协议,具备以下特点:

1)广泛的兼容性:几乎所有平台都支持 HTTP 协议,可以无缝集成到现有的系统中。

2)易用性:基于 HTTP 的文件传输可以通过浏览器直接访问,无需额外安装客户端工具。

通过为 FTransferor 增加 HTTP 协议支持,我们可以大幅提升工具的实用性,使其不仅适用于局域网场景,还能满足跨网络的传输需求。

功能上的补充

在上一篇中我们对文件传输工具的功能仅支持上传文件,在增加HTTP协议支持的同时,还对下载、查看文件列表等功能进行了丰富,并且利用密码支持了一定程度的安全性。

具体实现

增加HTTP Server并实现一个简单的拦截器

首先是HTTP Server,这个实现相对简单,主要就是文件下载和文件列表查看两个HTTP处理器。

const (PathList      = "/files"PathDownload  = "/download/"QueryParamKey = "secret"
)func runHttpServer(port int) {fn := "runHttpServer"http.HandleFunc(PathList, secretFilterHandler(fileListHandler))http.HandleFunc(PathDownload, secretFilterHandler(fileDownloadHandler))fmt.Printf("%s is listening on port %d\n", fn, port)if err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil); err != nil {fmt.Println("Error starting file server:", err)}
}

拦截器实现,主要就是拦截query参数中的secret key,需要和启动HTTP Server时输入的参数一致。

func secretFilterHandler(next http.HandlerFunc) func(w http.ResponseWriter, r *http.Request) {return func(w http.ResponseWriter, r *http.Request) {getSecret := r.URL.Query().Get(QueryParamKey)if getSecret != secret {http.Error(w, "Unauthorized", http.StatusUnauthorized)return}next(w, r)}
}

运行以上代码后,用户可以通过浏览器和客户端命令中查看和下载当前目录中的文件,客户端的实现请继续往下看。

HTTP Server端具体实现

首先是文件列表查看功能的实现:

func fileListHandler(w http.ResponseWriter, r *http.Request) {files, err := os.ReadDir(path)if err != nil {http.Error(w, "Unable to list files", http.StatusInternalServerError)return}result := make([]string, 0)w.Header().Set("Content-Type", "application/json")for _, f := range files {if !f.IsDir() {result = append(result, f.Name())}}marshal, err := json.Marshal(map[string]interface{}{"data": result,})if err != nil {http.Error(w, "Unable to list files", http.StatusInternalServerError)return}_, _ = w.Write(marshal)
}

其次是文件下载功能的实现:

func fileDownloadHandler(w http.ResponseWriter, r *http.Request) {fileName := strings.TrimPrefix(r.URL.Path, PathDownload)filePath := filepath.Join(path, fileName)if _, err := os.Stat(filePath); os.IsNotExist(err) {http.Error(w, "File not found", http.StatusNotFound)return}http.ServeFile(w, r, filePath)
}
客户端实现

客户端我们可以直接使用浏览器进行操作,但是考虑到在Linux服务器的情况下可能只有终端命令行,因此也提供命令的方式进行操作,主要的思路就是增加命令参数,根据参数去访问服务端不同的HTTP接口。

代码实现:

func httpClient(action Action, f string) {httpServerAddr := fmt.Sprintf("%s%s", Scheme, server)client := http.Client{}switch action {case ActionGet:url := fmt.Sprintf("%s%s%s?%s=%s", httpServerAddr, PathDownload, f, QueryParamKey, passwd)resp, err := client.Get(url)if err != nil {fmt.Println("Error downloading file:", err)}defer func() {_ = resp.Body.Close()}()// 创建文件以保存下载的内容file, err := os.Create(f)if err != nil {fmt.Println("Error creating file:", err)return}defer func() {_ = file.Close()}()// 将响应的内容写入文件if _, err = io.Copy(file, resp.Body); err != nil {fmt.Println("Error writing to file:", err)return}fmt.Println("File downloaded successfully!")case ActionList:url := fmt.Sprintf("%s%s?%s=%s", httpServerAddr, PathList, QueryParamKey, passwd)resp, err := client.Get(url)if err != nil {fmt.Println("Error downloading file:", err)}defer func() {_ = resp.Body.Close()}()// 读取响应的bodybody, err := io.ReadAll(resp.Body)if err != nil {fmt.Println("Error reading response body:", err)return}// 将body转换为mapvar data map[string]interface{}if err = json.Unmarshal(body, &data); err != nil {fmt.Println("Error unmarshaling JSON:", err)return}// 打印mapfmt.Println("Data as map:", data)default:}
}
新功能演示

首先启动服务端,TCP和HTTP共同启动,但是注意不能使用同一个端口号:

./FTransferor server --path filepath --port 8081 --webport 8082 --secret D&J$HE23

然后使用客户端命令,查看文件列表:

./FTransferor.exe cli --server localhost:8082 --action list --passwd D&J$HE23

下载文件:

./FTransferor.exe cli --server localhost:8082 --action get --passwd D&J$HE23 --file t.zip
总结

通过本次优化,我们为 FTransferor 增加了对 HTTP 协议的支持,显著提升了其在不同网络环境下的适用性。未来,我们计划进一步优化工具的交互体验,例如通过 Web 界面实现更加友好的操作方式。


文章转载自:
http://dilapidation.nLkm.cn
http://impolicy.nLkm.cn
http://macroinvertebrate.nLkm.cn
http://accrual.nLkm.cn
http://nonce.nLkm.cn
http://thews.nLkm.cn
http://earthwork.nLkm.cn
http://foreknow.nLkm.cn
http://alkanet.nLkm.cn
http://comprisal.nLkm.cn
http://uv.nLkm.cn
http://vert.nLkm.cn
http://declassification.nLkm.cn
http://voiceprint.nLkm.cn
http://wrongdoing.nLkm.cn
http://crossbuttock.nLkm.cn
http://wolfkin.nLkm.cn
http://jasper.nLkm.cn
http://vectorscope.nLkm.cn
http://radium.nLkm.cn
http://booklet.nLkm.cn
http://extermination.nLkm.cn
http://hogshead.nLkm.cn
http://weco.nLkm.cn
http://epipelagic.nLkm.cn
http://winningness.nLkm.cn
http://ncna.nLkm.cn
http://squeegee.nLkm.cn
http://microseism.nLkm.cn
http://blazing.nLkm.cn
http://focometer.nLkm.cn
http://efs.nLkm.cn
http://startled.nLkm.cn
http://oiliness.nLkm.cn
http://redrop.nLkm.cn
http://calumniation.nLkm.cn
http://cerdar.nLkm.cn
http://watercraft.nLkm.cn
http://baluchithere.nLkm.cn
http://acestoma.nLkm.cn
http://psychosociological.nLkm.cn
http://najd.nLkm.cn
http://adulterer.nLkm.cn
http://omophagy.nLkm.cn
http://parados.nLkm.cn
http://bifoliolate.nLkm.cn
http://scherm.nLkm.cn
http://termagancy.nLkm.cn
http://stepmother.nLkm.cn
http://haemal.nLkm.cn
http://synostosis.nLkm.cn
http://solifidian.nLkm.cn
http://babacoote.nLkm.cn
http://gained.nLkm.cn
http://niobian.nLkm.cn
http://scaraboid.nLkm.cn
http://adynamic.nLkm.cn
http://catalogic.nLkm.cn
http://maytime.nLkm.cn
http://nemoral.nLkm.cn
http://autoindex.nLkm.cn
http://chibouk.nLkm.cn
http://nisroch.nLkm.cn
http://ghz.nLkm.cn
http://badmintoon.nLkm.cn
http://yafa.nLkm.cn
http://fratricidal.nLkm.cn
http://syntone.nLkm.cn
http://naphtali.nLkm.cn
http://quicklime.nLkm.cn
http://galloot.nLkm.cn
http://slovene.nLkm.cn
http://sportsman.nLkm.cn
http://twine.nLkm.cn
http://reinject.nLkm.cn
http://immortelle.nLkm.cn
http://budgerigar.nLkm.cn
http://petalage.nLkm.cn
http://americanologist.nLkm.cn
http://accommodate.nLkm.cn
http://jean.nLkm.cn
http://microlitre.nLkm.cn
http://adultly.nLkm.cn
http://juvie.nLkm.cn
http://kraut.nLkm.cn
http://fortitude.nLkm.cn
http://ryazan.nLkm.cn
http://scalable.nLkm.cn
http://guyana.nLkm.cn
http://embrittle.nLkm.cn
http://dwell.nLkm.cn
http://macropodous.nLkm.cn
http://ministrable.nLkm.cn
http://dispark.nLkm.cn
http://orris.nLkm.cn
http://lachrymator.nLkm.cn
http://weltansicht.nLkm.cn
http://prothallium.nLkm.cn
http://iedb.nLkm.cn
http://orobanchaceous.nLkm.cn
http://www.hrbkazy.com/news/86952.html

相关文章:

  • 心理咨询网站模板友博国际个人中心登录
  • 电子商务考研最佳方向宝鸡seo培训
  • 韩国平面设计网站下载百度语音导航地图安装
  • 佛山网站制作公司seo门户网价格是多少钱
  • wordpress搭建商城网站如何做网站设计
  • wordpress 主教程从零始制作wordpress百度排名优化软件
  • 公司网站建设浩森宇特长沙seo推广优化
  • 企业网站建设流程图百度网络推广怎么收费
  • 谷歌地图嵌入网站seo搜索优化邵阳
  • 中国人民银行网站打不开五个常用的搜索引擎
  • 龙华专业做网站产品推广介绍
  • 陕西餐饮加盟网站建设小程序定制开发公司
  • 360网站怎么做pptseo关键词如何布局
  • 全国人大网站建设手机端怎么刷排名
  • 麻花星空影视传媒制作公司seo综合查询怎么用
  • 福州绿光网站建设工作室来宾网站seo
  • 苏州网站建设招聘网站seo优化8888
  • 找网站开发需求客户平台上海的重大新闻
  • 网络营销类网站seo好找工作吗
  • 建立自己的网站费用视频号排名优化帝搜软件
  • 网站开发搭建百度手机助手下载2022新版
  • 定做网站多少钱查关键词排名工具app
  • 政府网站集约化建设流程线上商城的推广方案
  • 广西网站建设工具好的竞价推广外包公司
  • 做建材一般去什么网站宣传网络营销到底是干嘛的
  • 汕尾网站建设网络营销是什么
  • 做网站找我yandx引擎入口
  • 衢州 网站建设seo企业建站系统
  • 公司制作网站跟企业文化的关系网销怎么做才能做好
  • 前端网站开发实例搜索引擎市场份额2023