当前位置: 首页 > 编程日记 > 正文

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

很怀念以前做机票的日子,,,,可惜回不去

以前的项目中的,拿来贴贴

场景:同步第三方数据,监听指定地址(指定时间间隔,否则不满足,因为需要处理粘包问题,改篇未实现)

主要内容四个文件;下面分别说下每个文件的功能。

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{//反馈给第三方平台 无CMD关键字ReSendMsgService.SendResponse(hltc, "无CMD关键字");}catch (Exception ex){MyLog.WriteLog("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回给第三方无CMD关键字失败" + ex.Message);}//记录本地日志MyLog.WriteLog("对象:OnHttpRequest:无CMD关键字,请联系第三方平台");return;}string sCmd = hltc.Request.QueryString["cmd"].ToUpper();switch (sCmd){case "SUBMITPOLICY"://指定接收方法MyLog.WriteLog("对象:指令通过,当前指令为SUBMITPOLICY");OnReceivPolisy(hltc);break;default://反馈第三方平台,并记录本地日志 ,cmd指令错误 您的请求不被识别try{ReSendMsgService.SendResponse(hltc, "PifRecvAgent 您的请求不被识别," + sCmd);}catch (Exception ex){MyLog.WriteLog("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回给第三方PifRecvAgent 您的请求不被识别失败" + ex.Message);}MyLog.WriteLog("对象:OnHttpRequest: 第三方平台的请求不被识别");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的数据为空.");}catch (Exception ex){GLOBAL.MyLog.WriteLog("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回给第三方Post的数据为空失败" + ex.Message);}MyLog.WriteLog("对象:OnReceivPolisy: Post的数据为空.");}//解析、入库bool jxbl = RelePolicyBuffer(buffer, buffer.Length);if (!jxbl)//XML解析失败
            {try{//发送指令给第三方ReSendMsgService.SendResponse(hltc, "XML结构解析失败");}catch (Exception ex){MyLog.WriteLog("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回给第三方XML结构解析失败失败" + ex.Message);}}//否则发送0给第三方try{ReSendMsgService.SendResponse(hltc, new byte[] { 0x30 });}catch (Exception ex){MyLog.WriteLog("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "返回给第三方 0 失败" + ex.Message);}}int r = 1;//解析入库方法bool RelePolicyBuffer(byte[] buffer, int bLen){//此处为解析xml的脚本,省略,,,,,,,xmltextreader方式解析,单向只读
    }}
}

2.ReSendMessage.cs实现(接受结果之后给第三方返回接受结果信息)

/// <summary>/// /将响应结果反馈第三方,否则第三方默认失败,如此将延迟发送时间/// </summary>public class ReSendMsgService{#region SendResponse 给请求发发送应答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类,用于监听器的初始化,见代码

/// <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);//添加监听前缀对象
                }_listener.Start();MyLog.WriteLog("时间:" + 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); //线程池委托接收对象
                }catch (Exception ex){GLOBAL.MyLog.WriteLog(ex);Trace.Fail("对象:ThreadFunction :An error occured in database access, details: " + ex.Message);}}}public void ListenerClose(){_ListenerThread.Abort();_bThreadLoop = false;_listener.Close();}}

4.MainManager.cs主方法,程序启动时初始化调用

/// <summary>/// 主函数方法类/// </summary>public class MainManager{/// <summary>/// 主方法 开始是方法/// </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();}}

转载于:https://www.cnblogs.com/Tmc-Blog/p/5164292.html

相关文章:

OpenCV-Java版学习(1.在IDEA中使用OpenCV)

前言 因为最近要做一个关于计算机视觉的应用程序&#xff0c;所以便来学一下OpenCV的使用&#xff0c;上网找了许久也没找到OpenCV关于Java的教程&#xff0c;无奈之下只能照着官方的Python版的文档学习&#xff0c;所幸里面的函数的使用方法基本都一样。 IDEA中使用OpenCV …

ElasticSearch Groovy脚本远程代码执行漏洞

什么是ElasticSearch&#xff1f;它是一种分布式的、实时性的、由JAVA开发的搜索和分析引擎。2014年&#xff0c;曾经被曝出过一个远程代码执行漏洞&#xff08;CVE-2014-3120&#xff09;&#xff0c;漏洞出现在脚本查询模块&#xff0c;由于搜索引擎支持使用脚本代码&#xf…

2021全国高校计算机能力挑战赛(初赛)Java试题三

二维空间中给定的一组点的坐标&#xff0c;以任意两个点为直径绘制一个圆。求可以绘制的最大圆&#xff0c;满足该圆不包含其他点&#xff0c;输出直径 import java.util.*;import java.util.Scanner; public class Main {private static double res -1;public static void ma…

在Blender中制作火箭发射烟雾和火焰模拟的动画

大小&#xff1a;1.25G 时长1h 30m 1280X720 MP4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 在Blender中制作火箭发射烟雾和火焰模拟的动画 Animate a Rocket Launch Smoke & Fire Simulation in Blender 信息: 制作火箭发射的短片…

OpenCV-Java版学习(2.图像入门)

前言 上一篇博客我们讲了如何在IDEA中使用OpenCV来进行一些简单的图像操作&#xff0c;这节我们来学习图像的一些基本的入门级操作。 图像入门 一.在Java中使用OpenCV注意事项 1.解决awt报错问题 先给大家贴个错误&#xff0c;如下图&#xff1a; 我们在使用awt处理图像的…

两个数组找不同

<script> function subArr(a, b) { return a.filter(function(i) { return b.indexOf(i) -1 }) } console.log(subArr([1,2,3,4],[3,4,5])); </script>转载于:https://www.cnblogs.com/mouse2417/p/5165391.html

jQuery Mobile设置边距的宽度和颜色

border-top:10px solid #EFEFF4"

2021全国高校计算机能力挑战赛(初赛)Java试题四

某游戏公司设计了一个奖励活动&#xff0c;给N个用户&#xff08;1<N<10^7&#xff09;连续编号为1到N&#xff0c;依据用户的编号S发放奖励。 import java.util.ArrayList; import java.util.Scanner;public class Main {public static void main(String[] args) {Scann…

Blender与UE5完美结合全流程创作游戏资产视频教程

Blender到虚幻引擎5 Blender to Unreal Engine 5 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44100 Hz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |大小:18.4 GB |时长:20h 55m 只有视频课程 无素材文件 你想学习如何…

OpenCV-Java版学习(3.对视频的基本操作)

前言 上一节我们学习了使用OpenCV对图像进行一些基础操作&#xff0c;现在我们学习对视频进行一些基础的操作。 对视频的基本操作 从相机中读取视频 我们从电脑自带的摄像头捕捉一段视频并在屏幕上显示出来&#xff0c;代码如下&#xff1a; import org.junit.jupiter.api…

win7如何设置某个软件不弹出用户账户控制

手动修改注册表&#xff1a; 在 HKEY_CURRENT_USERS\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 键下面新建值&#xff0c;值的名字是程序的全路径&#xff0c;值数据是“RunAsInvoker”。 该程序在没有修改系统文件或设置的情况下不会弹出用户帐户控…

IDEA热部署基于maven的web项目

第一步&#xff1a;首先先创建web项目 按照向导一步一步完成项目创建&#xff0c;我创建的示例项目为hotdeploddemo 第二步&#xff1a;设置项目的web资源 下图中的路径要修改正确&#xff0c;指向src/main/webapp/WEB-INF下面的web.xml,然后点击右下角的fix创建artifacts 第三…

2021全国高校计算机能力挑战赛(初赛)C语言试题一

输入两个整数x,y&#xff0c;输出x,y中各位数重新组合的可能形成最小的数。 #include <stdio.h>int main() {int n1, n2, tmp;int s[10000];int i 0;scanf("%d %d", &n1, &n2);while (n1 ! 0) {s[i] n1 % 10;i;n1 n1 / 10;}while (n2 ! 0) {s[i] n…

Unity创建游戏VFX视觉特效-初级到中级

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44100 Hz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:3.36 GB |时长:4h 17m 本课程是关于用Unity视觉效果图为游戏创建VFX。 你将从零开始学习VFX图形&#xff0…

关于object references an unsaved transient instance - save the transient instance before flushing的解决方法

关于object references an unsaved transient instance - save the transient instance before flushing的解决方法 异常信息 object references an unsaved transient instance - save the transient instance before flushing : com.gcl.demo.entity.Borrow.member -> c…

Java——Math类

Java中的Math类包含了基本的数学运算方法。下面将从以下几部分进行讲解。debug后发现,常量E和常量PI均为double类型。

SpringMVC工作环境搭建 配置文件

web.xml配置 在服务器端容器启动之前加载配置文件的顺序&#xff1a;context-param>listener>filter>servlet //容器配置application上下文的时候加载的文件 //这是spring容器的配置文件 <context-param> <param-name>contextConfigLocation</param-na…

@SuppressWarnings注解详细解析

注解屏蔽一些错误警告,但不是代码错误,这个注解可以提高代码的安全性,防止为了解决这个错误警告而造成不可估量的后果。

Oracle timestamp 转换 date

2019独角兽企业重金招聘Python工程师标准>>> --第一种 select dt0 from table--第二种 select cast(dt as date) from table 转载于:https://my.oschina.net/chenhao901007/blog/383345

2021全国高校计算机能力挑战赛(初赛)C语言试题二

写一个程序统计从1到N这N个数中&#xff0c;以下三个条件至少满足之一的数字x个数。 #include <stdio.h>int isprime(int m) {int f 1;for (int i 2; i < m / 2; i) {if (m % i 0) {f 0;break;}}return f; }int isse(int m) {int f 1;if (m % 7 ! 0)f 0;return …

用Sketchup和Vray学习室内设计

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |大小解压后:7 GB 含课程文件 |时长:10h 18m 3D设计入门指南 你会学到什么 学习高效建模所需的Sketchup技能。 了解虚拟…

Android 悬浮窗口

Android 悬浮窗口 一.创建悬浮窗口步骤 1.实现一个ViewGroup类,作为悬浮窗口的界面类,以便在里面重写onInterceptTouchEvent和onTouchEvent方法,实现移动界面的目的. 在本例中实现了一个FloatLayer类,可以作为通用的类,使用时需要传入WindowManager对象以实现移动窗口…

Java多线程复习:1(进程和线程、并发和并行)

进程和线程 进程 我们电脑中每一个运行着的程序都是一个进程&#xff0c;程序一旦运行就是进程。 进程可以视为程序的一个实例&#xff0c;大部分程序可以同时运行多个实例进程&#xff08;如&#xff1a;浏览器、记事本、画图等&#xff09;&#xff0c;也有的程序只能启动一…

新年新技术:MongoDB 3.0

前一篇介绍了HTTP/2&#xff0c;这一篇简单介绍下3月3号发布的MongoDB 3.0。 What’s new in MongoDB 3.0? 新的存储引擎WiredTiger MongoDB 3.0的存储引擎是插件式的&#xff0c;默认为新增的WiredTiger。WiredTiger相比原来的MMAPv1引擎的优点&#xff1a; 文档级别的锁这个…

2021全国高校计算机能力挑战赛(初赛)C语言试题四

肯德基有一种奇怪的优惠券&#xff0c;卷上的金额都是整数。活动要求找到3张优惠券总额恰好是商品本身。 #include<stdio.h> int main() {int p,n,f0,temp0;scanf("%d %d",&p,&n);int a[10000];for (int i 0; i < n; i) {scanf("%d",&am…

Substance Painter实时角色制作视频教程

持续时间2h 包含项目文件 1920X1080 MP4 语言&#xff1a;英语中文字幕&#xff08;机译&#xff09; 大小&#xff1a;5.63G Substance Painter实时角色制作视频教程 信息: 本教程旨在为一个实时角色解决实体画师中纹理化现实人类皮肤的奥秘&#xff01; 在这个2小时的全叙述…

Java多线程复习:2(线程的创建和使用)

线程的创建和使用 方法一&#xff0c;直接使用Thread import lombok.extern.slf4j.Slf4j; /*** author&#xff1a;小关同学爱吃汉堡* date: 2021/4/1 23:27*/ Slf4j(topic "c.Test1") public class Test1 {public static void main(String[] args) {//以匿名内部…

Apache htaccess 重写假设文件存在!

假设文件 data/cache/index.html 存在。那么才重写。否则使用默认的MVC 重写。by default.fufoxmail.com RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/data/cache/list_1.html -f RewriteRule ^game\/?$ data/cache/list_1.html [L] RewriteCond %{REQUEST_FILENAME} !-f …

Xamarin只言片语系列

把自己写xamarin中的一些知识点记录下来&#xff0c;分享给大家&#xff0c;欢迎指正。Xamarin只言片语1——Xamarin下的弹框Xamarin只言片语2——Xamarin下的web api操作更新中……

2021全国高校计算机能力挑战赛(初赛)C语言

3-2空间中有N个顶点&#xff08;顶点坐标用x,y,z表示&#xff09;&#xff0c;从中找出能构成三角形图形的最大面积&#xff0c;输出该面积。 #include<stdio.h> #include<math.h> int main() {int n,m0;double a,b,c,p,res[1000],s[1000][3];scanf("%d"…