日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络编程中如何得知一次请求(或响应)的数据已接收完

發布時間:2024/4/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络编程中如何得知一次请求(或响应)的数据已接收完 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
兩年前用.net 2.0做了一個反向代理服務器,在這兩年時間里,不斷修改BUG以及優化性能,使得可用性大大提高。近來碰到一個功能需求,實在無法找出有效的解決辦法,只好上來請教各位高人。
??? 先說說反向代理的工作機理吧。
1、客戶端通過瀏覽器訪問反向代理的時候,會發出一個HTTP請求,反向代理收到這個TCP連接的時候,建立一個新的會話用于處理這個請求(BeginAccept、EndAccept);
2、會話對象建立一個從客戶端接收數據的委托,開始異步讀取數據(BeginRead);
3、取得數據時,進入異步讀取的回調函數中,開始處理數據(EndRead);
4、檢查反向代理與服務器的連接是否已建立,如果沒有建立,那么需要先建立連接(ConnectServer),并建立服務器的異步讀取委托(BeginRead);
5、把數據異步寫入服務器(BeginWrite);
6、重新建立客戶端異步讀取委托(BeginRead),回到3;
7、收到服務器返回數據時,處理后,異步寫入客戶端(BeginWrite);
8、重新建立服務器異步讀取委托(BeginRead),回到7;

所有的數據傳輸,都使用異步來完成,而只需要在3和7處為業務編寫數據處理代碼即可。
實際上,對于反向代理來說,只需要處理客戶端發來的數據就可以了,需要把HTTP的HOST頭替換為真實服務器,而對于服務器響應的數據,只需要原樣發送給客戶端就可以了。

在步驟3中,我們只知道當前收到了客戶端發來的數據,而不知道這個數據是不是Http請求頭,或者是完整的Http請求頭。幸好,對于反向代理來說,不需要關心是否是完整的Http請求頭,只需要檢查是否是Http請求頭,如果是,就修改Host即可。在這里,我假設Http請求的第一個數據包肯定是獨立的數據包,不會“粘”在TCP連接中上一次數據的后面,這樣就可以直接使用Http協議規定的格式來檢查這個數據包是否Http請求頭了。雖然這個假設沒有什么依據,但它確實非常有效。

程序就這樣工作了兩年,沒有什么問題。

但接下來,問題就出現了,有一個需求,要求能夠把服務器返回的頁面中的某個字符串替換為指定的字符串。比如我用反向代理指向博客園,我就需要把博客園頁面中所有使用了絕對路徑的連接修改為指向反向代理服務器的連接。這就要求在步驟7這里處理數據,把數據轉為字符串,然后替換鏈接,然后才發往客戶端。

但步驟7每次收到的數據只是一個片段,而不是整個頁面的HTML。即使我們再次假設Http響應的第一個數據包是獨立的數據包,也只能識別哪些是響應頭,哪些是數據體而已。也想過每一段數據轉為這一段的字符串進行處理,但是,如果剛好某個字符被網絡層拆分到兩個TCP數據包里怎么辦?還有,想博客園這樣使用了gzip的,如果不接受完整個頁面的數據,是無法解壓的;就算這兩種情況都不存在,而網絡層剛好在超鏈接的地方拆分數據包怎么辦?

因此,最保守的做法就是拿到整個頁面數據再開始處理。也想過Http響應頭那里有個Content-Length指明內容長度的,但實際中,很多響應根本就不到這個段。

我查看過HttpListener類和HttpListenerRequest類,嘗試從中發現它是如何接受完一次請求(響應)的,可惜這兩個類調用了大量NativeAPI,就無法得知了。

還有瀏覽器,它又是如何得知某次響應是否已經完成的呢?

還請各位高人多多指教!

這個代理已經放到codeplex上,大家有興趣可以看看:http://www.codeplex.com/XProxy/

還有,不要忘了給我的問題提個解決思路^_^
謝謝!

QQ:99363590
E-Mail:nnhy#vip.qq.com
QQ群:10193406 我不相信神話,我只相信汗水!我不相信命運,我只相信雙手! 分類: 1.首頁原創精華.NET區123
本文轉自大石頭博客園博客,原文鏈接:http://www.cnblogs.com/nnhy/archive/2008/03/10/1098947.html,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的网络编程中如何得知一次请求(或响应)的数据已接收完的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩一区二区三区四区五区六区 | www.黄色大片 | 香蕉视频最新网址 | 亚洲视频高清 | 激情综合亚洲 | 黑帮大佬和我的三百六十五天 | 国产一级片免费观看 | 国产裸体视频 | 一级片一区二区三区 | 成人在线日韩 | 久草福利资源站 | 亚洲欧美综合精品久久成人 | 亚洲女人在线 | 波多野结衣 一区 | 黑人一级黄色片 | 成人p站在线观看 | 欧美成人午夜剧场 | 色综合一区二区 | 久久午夜网 | 成人爽a毛片一区二区免费 日本高清免费看 | 日本xxxxxwwwww | 日韩中文字幕二区 | 国产精品麻豆视频 | 亚洲一区91 | 黄网站免费入口 | 深夜福利视频导航 | 第九色| 深夜啪啪| 国产免费色视频 | 亚洲一区二区电影 | 在线观看av网| 高h调教冰块play男男双性文 | 欧美午夜精品久久久久久蜜 | 麻豆亚洲一区 | 国产亚洲精品成人无码精品网站 | 色亚洲欧美 | 91porn破解版| 日本黄色免费视频 | 操操操干干干 | 韩国成年人网站 | 在线日韩国产 | 狠狠爱天天干 | 懂色av蜜臀av粉嫩av分享吧最新章节 | a级片免费看 | 好吊妞视频一区二区三区 | 中文无码av一区二区三区 | 强行糟蹋人妻hd中文字幕 | 活大器粗np高h一女多夫 | 久久成人网18网站 | 少妇野外性xx老女人野外性xx | 欧美精品网站 | 中文字幕永久免费 | 亚洲国产精彩视频 | 天天射天天射 | 国产在线xxxx| 欧美日韩国产精品一区 | 比利时xxxx性hd极品 | 成人免费视频网站在线观看 | 污污网站在线观看视频 | 亚洲综合视频一区 | 手机av在线免费 | 精品一区二区视频 | 夜夜se| 泰剧19禁啪啪无遮挡 | 影院色原网站 | 久久国产色av| 可以在线看的av | 国产乱子伦精品视频 | 在线观看日韩精品 | 椎名由奈在线观看 | 麻豆影音先锋 | 成年人免费黄色 | 女人一区二区三区 | 亚洲第一页在线观看 | 一本大道东京热无码aⅴ | 147人体做爰大胆图片成人 | 全肉的吸乳文 | 国产欧美久久一区二区三区 | 91深夜视频| 在线观看网址你懂的 | 色黄视频网站 | 波多野结衣在线观看一区二区三区 | av不卡免费观看 | 91爱爱.com| 成人免费无码大片a毛片抽搐色欲 | 99久精品视频 | 亚洲三级在线 | 中国老头同性xxxxx | 手机看片日韩福利 | 国产日批视频在线观看 | 免费美女视频网站 | 四虎精品在永久在线观看 | 秋霞成人午夜伦在线观看 | 国产毛片在线 | 91精品国产91久久久 | 国产高清免费av | 国产在线播放一区二区 | 欧美日韩高清在线观看 | 丝袜诱惑一区 |