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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

用HttpListener做web服务器,简单解析post方式过来的参数、上传的文件

發布時間:2024/9/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用HttpListener做web服务器,简单解析post方式过来的参数、上传的文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

服務端:

?

public?class?AdvertisementSource?:?IDisposable
????{
????????HttpListener?httpListener;
????????bool?stopped;

????????#region?構造和析構

????????//==

????????#region?IDisposable
????????[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
????????int?disposedFlag;

????????~AdvertisementSource()
????????{
????????????Dispose(false);
????????}

????????///?<summary>
????????
///?釋放所占用的資源
????????
///?</summary>
????????public?void?Dispose()
????????{
????????????Dispose(true);
????????????GC.SuppressFinalize(this);
????????}

????????///?<summary>
????????
///?獲取該對象是否已經被釋放
????????
///?</summary>
????????[System.ComponentModel.Browsable(false)]
????????public?bool?IsDisposed
????????{
????????????get
????????????{
????????????????return?disposedFlag?!=?0;
????????????}
????????}

????????#endregion

????????protected?virtual?void?Dispose(bool?disposing)
????????{
????????????if?(System.Threading.Interlocked.Increment(ref?disposedFlag)?!=?1)?return;
????????????if?(disposing)
????????????{
????????????????httpListener.Stop();
????????????}
????????????//在這里編寫非托管資源釋放代碼
????????}

????????#endregion

????????public?void?Initialize()
????????{
????????????httpListener?=?new?HttpListener();
????????????httpListener.Prefixes.Add(string.Format("http://*:{0}/AdSource/",?8080));
????????????httpListener.Start();
????????????httpListener.BeginGetContext(GetHttpContextCallback,?null);

????????}???????
????????
????????public?void?GetHttpContextCallback(IAsyncResult?iar)
????????{
????????????if?(stopped)?return;
????????????var?context?=?httpListener.EndGetContext(iar);
????????????httpListener.BeginGetContext(GetHttpContextCallback,?null);
????????????string?endPoint?=?context.Request.RemoteEndPoint.ToString();
????????????int?spIndex?=?endPoint.IndexOf(":");
????????????endPoint?=?endPoint.Substring(0,?spIndex);
???????????
????????????using?(HttpListenerResponse?response?=?context.Response)
????????????{ //get?的方式在如下解析即可得到客戶端參數及值
????????????????//string?userName?=?context.Request.QueryString["userName"];
????????????????
//string?password?=?context.Request.QueryString["password"];
????????????????
//string?suffix?=?context.Request.QueryString["suffix"];
????????????????
//string?adType?=?context.Request.QueryString["adtype"];//文字,圖片,視頻

?????????????
????????????????
????????????????if?(!context.Request.HasEntityBody)//無數據
????????????????{
????????????????????response.StatusCode?=?403;
????????????????????return;
????????????????}

????????????????string?userName?=?"";
????????????????string?password?=?"";
????????????????string?suffix?=?"";
????????????????string?adType?=?"";
???????????????//post?的方式有文件上傳的在如下解析即可得到客戶端參數及值

????????????????HttpListenerRequest?request?=?context.Request;????????????????
????????????????if?(request.ContentType.Length?>?20?&&?string.Compare(request.ContentType.Substring(0,?20),?"multipart/form-data;",?true)?==?0)
????????????????{
????????????????????List<Values>?lst?=?new?List<Values>();
????????????????????Encoding?Encoding?=?request.ContentEncoding;
????????????????????string[]?values?=?request.ContentType.Split(';').Skip(1).ToArray();
????????????????????string?boundary?=?string.Join(";",?values).Replace("boundary=",?"").Trim();
????????????????????byte[]?ChunkBoundary?=?Encoding.GetBytes("--"?+?boundary?+?"\r\n");
????????????????????byte[]?EndBoundary?=?Encoding.GetBytes("--"?+?boundary?+?"--\r\n");
????????????????????Stream?SourceStream?=?request.InputStream;
????????????????????var?resultStream?=?new?MemoryStream();
????????????????????bool?CanMoveNext?=?true;
????????????????????Values?data?=?null;
????????????????????while?(CanMoveNext)
????????????????????{
????????????????????????byte[]?currentChunk?=?ReadLineAsBytes(SourceStream);
????????????????????????if?(!Encoding.GetString(currentChunk).Equals("\r\n"))
????????????????????????????resultStream.Write(currentChunk,?0,?currentChunk.Length);
????????????????????????if?(CompareBytes(ChunkBoundary,?currentChunk))
????????????????????????{
????????????????????????????byte[]?result?=?new?byte[resultStream.Length?-?ChunkBoundary.Length];
????????????????????????????resultStream.Position?=?0;
????????????????????????????resultStream.Read(result,?0,?result.Length);
????????????????????????????CanMoveNext?=?true;
????????????????????????????if?(result.Length?>?0)
????????????????????????????????data.datas?=?result;
????????????????????????????data?=?new?Values();
????????????????????????????lst.Add(data);
????????????????????????????resultStream.Dispose();
????????????????????????????resultStream?=?new?MemoryStream();

????????????????????????}
????????????????????????else?if?(Encoding.GetString(currentChunk).Contains("Content-Disposition"))
????????????????????????{
????????????????????????????byte[]?result?=?new?byte[resultStream.Length?-?2];
????????????????????????????resultStream.Position?=?0;
????????????????????????????resultStream.Read(result,?0,?result.Length);
????????????????????????????CanMoveNext?=?true;
????????????????????????????data.name?=?Encoding.GetString(result).Replace("Content-Disposition:?form-data;?name=\"",?"").Replace("\"",?"").Split(';')[0];
????????????????????????????resultStream.Dispose();
????????????????????????????resultStream?=?new?MemoryStream();
????????????????????????}
????????????????????????else?if?(Encoding.GetString(currentChunk).Contains("Content-Type"))
????????????????????????{
????????????????????????????CanMoveNext?=?true;
????????????????????????????data.type?=?1;
????????????????????????????resultStream.Dispose();
????????????????????????????resultStream?=?new?MemoryStream();
????????????????????????}
????????????????????????else?if?(CompareBytes(EndBoundary,?currentChunk))
????????????????????????{
????????????????????????????byte[]?result?=?new?byte[resultStream.Length?-?EndBoundary.Length?-?2];
????????????????????????????resultStream.Position?=?0;
????????????????????????????resultStream.Read(result,?0,?result.Length);
????????????????????????????data.datas?=?result;
????????????????????????????resultStream.Dispose();
????????????????????????????CanMoveNext?=?false;
????????????????????????}
????????????????????}
????????????????????foreach?(var?key?in?lst)
????????????????????{
????????????????????????if?(key.type?==?0)
????????????????????????{
????????????????????????????string?value?=?Encoding.GetString(key.datas).Replace("\r\n",?"");
????????????????????????????if?(key.name?==?"username")
????????????????????????????????userName?=?value;
????????????????????????????if?(key.name?==?"password")
????????????????????????????????password?=?value;
????????????????????????????if?(key.name?==?"suffix")
????????????????????????????????suffix?=?value;
????????????????????????????if?(key.name?==?"adtype")
????????????????????????????????adType?=?value;
????????????????????????}????????????????????????
????????????????????????if?(key.type?==?1)
????????????????????????{
????????????????????????????FileStream?fs?=?new?FileStream("c:\\3.jpg",?FileMode.Create);
????????????????????????????fs.Write(key.datas,?0,?key.datas.Length);
????????????????????????????fs.Close();
????????????????????????????fs.Dispose();
????????????????????????}
????????????????????}
???????????????????
????????????????????if?(userName?!=?"test"?||?password?!=?"test"?||?string.IsNullOrEmpty(suffix)?||?string.IsNullOrEmpty(adType))
????????????????????{
????????????????????????response.StatusCode?=?403;
????????????????????????return;
????????????????????}
????????????????????int?adtype?=?0;
????????????????????int.TryParse(adType,?out?adtype);
????????????????}

????????????????response.ContentType?=?"text/html;charset=utf-8";
????????????????try
????????????????{
????????????????????using?(System.IO.Stream?output?=?response.OutputStream)
????????????????????using?(StreamWriter?writer?=?new?StreamWriter(output,?Encoding.UTF8))
????????????????????????writer.WriteLine("接收完成!");
????????????????}
????????????????catch
????????????????{
????????????????}
????????????????response.Close();
????????????}
????????}

????????byte[]?ReadLineAsBytes(Stream?SourceStream)
????????{
????????????var?resultStream?=?new?MemoryStream();
????????????while?(true)
????????????{
????????????????int?data?=?SourceStream.ReadByte();
????????????????resultStream.WriteByte((byte)data);
????????????????if?(data?==?10)
????????????????????break;
????????????}
????????????resultStream.Position?=?0;
????????????byte[]?dataBytes?=?new?byte[resultStream.Length];
????????????resultStream.Read(dataBytes,?0,?dataBytes.Length);
????????????return?dataBytes;
????????}
?????????
????????bool?CompareBytes(byte[]?source,?byte[]?comparison)
????????{
????????????int?count?=?source.Length;
????????????if?(source.Length?!=?comparison.Length)
????????????????return?false;
????????????for?(int?i?=?0;?i?<?count;?i++)
????????????????if?(source[i]?!=?comparison[i])
????????????????????return?false;
????????????return?true;
????????}

????????public?class?Values
????????{
????????????public?int?type?=?0;//0參數,1文件
????????????public?string?name;
????????????public?byte[]?datas;
????????}
????}

客戶端:

?

<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html?xmlns="http://www.w3.org/1999/xhtml">
<head>
????<title></title>???
</head>

<body>
????<form?method="post"?enctype="multipart/form-data"?action="http://127.0.0.1:8080/AdSource/">
????<p>
????????<input?id="File1"?name="file1"?type="file"?/></p>
??<p>
????????<input?id="username"?name="username"?type="text"?value="test"?/></p>
??????<p>
????????<input?id="password"?name="password"?type="text"?value="test"?/></p>
????<p>
????????<input?id="suffix"?name="suffix"?type="text"?value="txt"?/></p>
????<p>
????????<input?id="adtype"?name="adtype"?type="text"?value="0"/></p>
????<p>
????????<input?id="Button1"?type="submit"?value="submit"??/></p>
????</form>????
</body>
</html>


本文轉自94cool博客園博客,原文鏈接:http://www.cnblogs.com/94cool/archive/2011/10/25/2223457.html,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的用HttpListener做web服务器,简单解析post方式过来的参数、上传的文件的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品免费无遮挡无码永久视频 | 毛片网站在线免费观看 | 免费网站污 | 五十路熟母 | 嫩草嫩草嫩草嫩草 | 禁止18在线观看 | 亚洲国产欧美另类 | 日韩一二三区视频 | xxx日本黄色 | 精品日本视频 | 性欧美色图 | 色女人影院 | 老地方在线观看免费动漫 | 在线观看色网 | 加勒比av在线播放 | 97人人爽人人爽人人爽 | 成人欧美一区二区三区黑人免费 | 久久久久久久久久久久久久国产 | 久久人人爱 | 免费不卡毛片 | 亚洲免费av网址 | 蜜桃久久av一区 | 国产91网 | 在线观看免费高清视频 | 日韩精品一区二区三区 | 韩国成人免费视频 | 国产精品精华液网站 | 羞羞色视频 | 男男全肉变态重口高h | 日韩视频在线观看视频 | 91网站永久免费看nba视频 | 天天插夜夜 | 欧美二区在线观看 | 久久成人久久爱 | 国产成人99 | 一区二区高清在线 | 天堂精品视频 | 国产精品无码人妻一区二区在线 | 亚洲国产黄 | 国产精品久久久久久久免费看 | 国内毛片毛片 | 日本一区二区三区视频在线观看 | 97超碰人人看 | 女人喂男人奶水做爰视频 | 亚洲综合免费观看高清完整版在线 | 欧美大片xxx | 亚洲激情免费 | 中文字幕在线精品 | 久久天天操 | 永久免费毛片 | 国产又猛又粗 | 日本成人综合 | 综合色88| 色欧美在线 | 中文 日韩 欧美 | 天天爽一爽 | 影音先锋在线播放 | 中文幕无线码中文字夫妻 | 国产精品免费在线播放 | 欧美xxxxx精品| 五月婷婷久| 欧美日批视频 | 精品国产一区二区三区四 | 欧美精品一二三区 | 91在线免费视频观看 | 丝袜国产视频 | 性欧美视频 | 国产视频一区在线播放 | 人妻一区二区三区视频 | 91麻豆精品国产91久久久久久 | 麻豆传媒观看 | 中国一级片在线观看 | 99免费观看视频 | 三上悠亚在线一区 | 一区不卡在线观看 | 国产视频久久久久 | 色综合婷婷 | 久久国产成人精品av | 亚洲aaa| 成人综合色站 | 欧美怡红院 | 国产精品嫩草69影院 | 亚洲成人tv | 免费黄色观看 | 校霸被c到爽夹震蛋上课高潮 | 亚洲男人的天堂网站 | av一级二级| 99在线精品视频免费观看20 | 黑人高潮一区二区三区在线看 | 精品亚洲一区二区三区四区五区 | 男生把女生困困的视频 | 日本少妇裸体做爰 | 探花视频在线版播放免费观看 | 亚洲精品国产一区二 | 日本黄色xxxxx | 双性皇帝高h喷汁呻吟 | www.黄色网址 | 韩国美女av | 日韩xx视频 |