HttpListener通讯成功案例
1、创建WindowsService,如下代码
using System;
using System.Net;
using System.Net.Sockets;
using System.ServiceProcess;
using System.Text;
using System.Threading;
namespace WindowsService
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
public static int TerminalPort = 12800;
public static Thread ListeningThread;
public static int Port;
public static Encoding Encoding;
protected override void OnStart(string[] args)
{
InitialAcceptor(TerminalPort);
}
protected override void OnStop()
{
}
public void DebugTest()
{
Console.WriteLine("StartService...");
InitialAcceptor(TerminalPort);
Console.WriteLine("Terminal Listened on Port=" + TerminalPort);
}
public void InitialAcceptor(int tunnelPort)
{
Port = tunnelPort;
Encoding = Encoding.UTF8;
ListeningThread = new Thread(new ThreadStart(StartListening));
ListeningThread.IsBackground = Environment.OSVersion.Platform != PlatformID.Unix;//
ListeningThread.Start();
}
#region MyRegion
//internal void StartListening()
//{
// try
// {
// while (true)
// {
// try
// {
// listener = new HttpListener();
// listener.Prefixes.Add("http://+:" + Port + "/");
// listener.Start();
// }
// catch
// {
// Thread.Sleep(1000);
// }
// try
// {
// while (true)
// {
// IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
// result.AsyncWaitHandle.WaitOne();
// }
// }
// catch (Exception e)
// {
// }
// }
// }
// catch
// {
// }
//}
#endregion
internal void StartListening()
{
try
{
while (true)
{
try
{
#region MyRegion
//服务端:
//var listener = new HttpListener();
//listener.Prefixes.Add("http://*:8080/");
//listener.Start();
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://+:" + 1234 + "/");
listener.Start();
while (true)
{
IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
result.AsyncWaitHandle.WaitOne();
}
#endregion
}
catch
{
Thread.Sleep(1000);
}
}
}
catch
{
}
}
private void ListenerCallback(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
processRequest(context);
}
private void processRequest(HttpListenerContext context)
{
HttpListenerRequest request = context.Request;
try
{
//string url = System.Web.HttpUtility.UrlDecode(request.RawUrl);
string ss = request.QueryString["eid"];
context.Response.ContentEncoding = UTF8Encoding.UTF8;
context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
//context.Response.ContentType = "image/jpg";
//context.Response.ContentLength64 = buffer.Length;
var output = context.Response.OutputStream;
byte[] nn = System.Text.Encoding.Default.GetBytes("qqqqqqqqqqqq");
output.Write(nn, 0, nn.Length);
output.Close();
}
catch (Exception e)
{
}
finally
{
}
}
}
}
2、创建控制台,测试启动WindowsService服务
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using WindowsService;
namespace WindowsService1TestConsole
{
class Program
{
static void Main(string[] args)
{
try
{
Service1 service1 = new Service1();
#if DEBUG
service1.DebugTest();
#endif
Thread.CurrentThread.IsBackground = false;
Thread.Sleep(Timeout.Infinite);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.Source);
Console.WriteLine(e.StackTrace);
Console.WriteLine(e.InnerException != null ? e.InnerException.ToString() : "");
Console.ReadLine();
}
}
}
}
3、测试http请求
直接 地址栏输入:http://127.0.0.1:1234/?eid=30
结果:qqqqqqqqqqqq

写测试代码
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();//返回结果
myStreamReader.Close();
myResponseStream.Close();
HttpListener通讯成功案例的更多相关文章
- Socket通讯成功案例
Socket通讯案例 #region 服务端 //int port = 1234; //string host = "127.0.0.1"; //IPAddress ip = IP ...
- 【即时通讯】即时通讯及XMPP概述及…
在讲解XMPP前,我们需要先了解什么是即时通讯技术: * 即时通讯技术(IM - InstantMessaging)支持用户在线实时交谈.当一方需要发送消息时,用户必须打开一个窗口,以便让用户与交流对 ...
- thrift实现js与C#通讯
利用thrift实现js与C#通讯的实例代码 1.为什么要用thrift js C#? 1.1 首先,js 通过 thrift 访问C#,实际上是一种c/s模式.thrift是通信工具,js是客户端, ...
- 细说Web页面与本地电脑通讯
话说在很久很久以前.Web页面与客户的本地电脑Localhost通讯,有两种方式: 1.Flash 2.ActiveX控件 由于Flash本人不是很了解,也给出不了什么示例代码, 对于ActiveX控 ...
- Android HTTP通讯
这里有一个非常棒的http通讯的总结,我看了以后茅塞顿开. 先贴代码: 01 public class Activity1 extends Activity { 02 03 private ...
- 简单搭建http服务器-HttpListener使用
使用HTTPListener可以简单搭建一个Http服务器,对于本地使用很是方面,想起之前使用了WebSocket来与本地网页通讯的例子,也是可以改为使用HTTPListener来做的.看下HTTPL ...
- HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术
最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...
- (转)利用libcurl和国内著名的两个物联网云端通讯的例程, ubuntu和openwrt下调试成功(四)
1. libcurl 的参考文档如下 CURLOPT_HEADERFUNCTION Pass a pointer to a function that matches the following pr ...
- (转)linux下和云端通讯的例程, ubuntu和openwrt下实验成功(二)
前言: 上节用纯linux的函数实现了和云端通讯, 本节开始利用传说中的神器libcurl 话说一个网络程序员对书法十分感兴趣,退休后决定在这方面有所建树. 于是花重金购买了上等的文房四宝. 一 ...
随机推荐
- CSS强制英文、中文换行与不换行
.p1{ word-break:break-all; width:150px;}/*只对英文起作用,以字母作为换行依据*/ .p2{ word-wrap:break-word; width:150px ...
- struts2简单入门-关于Result标签Type属性的说明
Result标签 作用 当action执行完毕,后要返回什么样的视图. Type属性 决定返回的是什么视图. struts-default.xml的Type属性的定义 <result-types ...
- 在IDEA中新建Spring Boot项目
新建项目 选择项目构建方式 选择项目依赖 新建项目成功后(Maven构建方式)
- apk逆向实例 TopCtf
TopCtf 题目链接: https://pan.baidu.com/s/1jINx7Fo (在里面找相应的名字就行) 背景故事: 我是小白一枚,自学一些基础知识... 从朋友那得到的题,朋友说巨 ...
- Challenge Create a Launch Pad
在头文件中定义网格体组件和重叠组件 UPROPERTY(VisibleAnywhere,Category="Components") UStaticMeshComponent* M ...
- Windows10安装Ubuntu子系统设置Python3测试环境
参考链接:https://blog.csdn.net/shanelee73/article/details/80238876
- SpringBoot整合全局异常处理&SpringBoot整合定时任务Task&SpringBoot整合异步任务
============整合全局异常=========== 1.整合web访问的全局异常 如果不做全局异常处理直接访问如果报错,页面会报错500错误,对于界面的显示非常不友好,因此需要做处理. 全局异 ...
- 不指定虚拟路径的前提下通过http访问pdf、图片等文件
通常我们通过http访问图片或者pdf的时候都是将文件上传到指定文件夹下面,然后通过配置虚拟路径来访问指定的资源. 在不配置虚拟路径的情况下,我们通过获取到response的outpurstream, ...
- 【运维】略谈Raid级别
*何为Raid? Raid就是磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"独立磁盘构成的具有冗余能力的阵列&quo ...
- Git学习笔记05-撤销修改
使用 git checkout -- file可以撤销工作区的修改 一种是修改后还没有放到暂存区,撤销修改回到和版本库一模一样的状态 lesson.txt文件已经提交到版本库了,内容如图. 修改一 ...