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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

监听指定端口数据交互(HttpListenerContext )

發(fā)布時(shí)間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 监听指定端口数据交互(HttpListenerContext ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

很懷念以前做機(jī)票的日子,,,,可惜回不去

以前的項(xiàng)目中的,拿來(lái)貼貼

場(chǎng)景:同步第三方數(shù)據(jù),監(jiān)聽(tīng)指定地址(指定時(shí)間間隔,否則不滿足,因?yàn)樾枰幚碚嘲鼏?wèn)題,改篇未實(shí)現(xiàn))

主要內(nèi)容四個(gè)文件;下面分別說(shuō)下每個(gè)文件的功能。

1.HttpRequestManager.cs顧名思義,HttpRequest

public class HttpRequestManager{int _sDefaultLen = 102400;public virtual void OnHttpRequest(object context){HttpListenerContext hltc = context as HttpListenerContext;if (hltc.Request.QueryString["cmd"] == null){try{//反饋給第三方平臺(tái) 無(wú)CMD關(guān)鍵字ReSendMsgService.SendResponse(hltc, "無(wú)CMD關(guān)鍵字");}catch (Exception ex){MyLog.WriteLog("時(shí)間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回給第三方無(wú)CMD關(guān)鍵字失敗" + ex.Message);}//記錄本地日志MyLog.WriteLog("對(duì)象:OnHttpRequest:無(wú)CMD關(guān)鍵字,請(qǐng)聯(lián)系第三方平臺(tái)");return;}string sCmd = hltc.Request.QueryString["cmd"].ToUpper();switch (sCmd){case "SUBMITPOLICY"://指定接收方法MyLog.WriteLog("對(duì)象:指令通過(guò),當(dāng)前指令為SUBMITPOLICY");OnReceivPolisy(hltc);break;default://反饋第三方平臺(tái),并記錄本地日志 ,cmd指令錯(cuò)誤 您的請(qǐng)求不被識(shí)別try{ReSendMsgService.SendResponse(hltc, "PifRecvAgent 您的請(qǐng)求不被識(shí)別," + sCmd);}catch (Exception ex){MyLog.WriteLog("時(shí)間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回給第三方PifRecvAgent 您的請(qǐng)求不被識(shí)別失敗" + ex.Message);}MyLog.WriteLog("對(duì)象:OnHttpRequest: 第三方平臺(tái)的請(qǐng)求不被識(shí)別");break;}}//接收,解析方法void OnReceivPolisy(HttpListenerContext hltc){byte[] buffer = new byte[_sDefaultLen];Stream stream = hltc.Request.InputStream;int sLen = 0;int sIndex = 0;while ((sIndex = stream.Read(buffer, sLen, 512)) != 0)sLen += sIndex;if (sLen < 1){//反饋給第三方,并記錄本地日志try{ReSendMsgService.SendResponse(hltc, "Post的數(shù)據(jù)為空.");}catch (Exception ex){GLOBAL.MyLog.WriteLog("時(shí)間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回給第三方Post的數(shù)據(jù)為空失敗" + ex.Message);}MyLog.WriteLog("對(duì)象:OnReceivPolisy: Post的數(shù)據(jù)為空.");}//解析、入庫(kù)bool jxbl = RelePolicyBuffer(buffer, buffer.Length);if (!jxbl)//XML解析失敗
            {try{//發(fā)送指令給第三方ReSendMsgService.SendResponse(hltc, "XML結(jié)構(gòu)解析失敗");}catch (Exception ex){MyLog.WriteLog("時(shí)間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回給第三方XML結(jié)構(gòu)解析失敗失敗" + ex.Message);}}//否則發(fā)送0給第三方try{ReSendMsgService.SendResponse(hltc, new byte[] { 0x30 });}catch (Exception ex){MyLog.WriteLog("時(shí)間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回給第三方 0 失敗" + ex.Message);}}int r = 1;//解析入庫(kù)方法bool RelePolicyBuffer(byte[] buffer, int bLen){//此處為解析xml的腳本,省略,,,,,,,xmltextreader方式解析,單向只讀
    }}
}

2.ReSendMessage.cs實(shí)現(xiàn)(接受結(jié)果之后給第三方返回接受結(jié)果信息)

/// <summary>/// /將響應(yīng)結(jié)果反饋第三方,否則第三方默認(rèn)失敗,如此將延遲發(fā)送時(shí)間/// </summary>public class ReSendMsgService{#region SendResponse 給請(qǐng)求發(fā)發(fā)送應(yīng)答public static bool SendResponse(HttpListenerContext ctx, string sErr){byte[] buf = Encoding.Default.GetBytes(sErr);return SendResponse(ctx, 200, buf);}public static bool SendResponse(HttpListenerContext ctx, byte[] buf){return SendResponse(ctx, 200, buf);}public static bool SendResponse(HttpListenerContext ctx, int nStatusCode, byte[] buf){try{ctx.Response.StatusCode = nStatusCode;ctx.Response.ContentLength64 = buf.Length;ctx.Response.OutputStream.Write(buf, 0, buf.Length);return true;}catch (Exception ex){}return false;}#endregion}

3.ThreadEntrustManager.cs類,用于監(jiān)聽(tīng)器的初始化,見(jiàn)代碼

/// <summary>/// 委托方法類/// </summary>public class ThreadEntrustManager{protected HttpListener _listener;Thread _ListenerThread;bool _bThreadLoop;string url;static string _ListenerUrls = XmlHelp.GetXmlNode("LocalListenUrl").InnerText;string[] _ListenerUrlsArray = _ListenerUrls.Split(';');public void ListenerStart(){if (_ListenerUrlsArray.Length > 0){_listener = new HttpListener();_bThreadLoop = true;foreach (string strUrl in _ListenerUrlsArray){url = strUrl;_listener.Prefixes.Add(url);//添加監(jiān)聽(tīng)前綴對(duì)象
                }_listener.Start();MyLog.WriteLog("時(shí)間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "  start listening...");_ListenerThread = new Thread(new ThreadStart(ThreadFunction));_ListenerThread.Start();}else{_bThreadLoop = false;//日志}}void ThreadFunction(){while (_bThreadLoop){try{HttpListenerContext hltc = _listener.GetContext();ThreadPool.QueueUserWorkItem(new HttpRequestManager().OnHttpRequest, hltc); //線程池委托接收對(duì)象
                }catch (Exception ex){GLOBAL.MyLog.WriteLog(ex);Trace.Fail("對(duì)象:ThreadFunction :An error occured in database access, details: " + ex.Message);}}}public void ListenerClose(){_ListenerThread.Abort();_bThreadLoop = false;_listener.Close();}}

4.MainManager.cs主方法,程序啟動(dòng)時(shí)初始化調(diào)用

/// <summary>/// 主函數(shù)方法類/// </summary>public class MainManager{/// <summary>/// 主方法 開(kāi)始是方法/// </summary>public static void MainStart(){try{_ListenerStart();}catch (Exception ex){//記錄異常日志信息}}public static void _ListenerStart(){ThreadEntrustManager manager = new ThreadEntrustManager();manager.ListenerStart();}public static void Close(){new ThreadEntrustManager().ListenerClose();}}

?

轉(zhuǎn)載于:https://www.cnblogs.com/Tmc-Blog/p/5164292.html

總結(jié)

以上是生活随笔為你收集整理的监听指定端口数据交互(HttpListenerContext )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。