HttpListener sSocket = new HttpListener();
sSocket.Prefixes.Add("http://127.0.0.1:8080/");
sSocket.Start();
sSocket.BeginGetContext(new AsyncCallback(GetContextCallBack), sSocket);
System.Diagnostics.Process.Start("http://127.0.0.1:8080");
button1.Enabled = false; private void GetContextCallBack(IAsyncResult ar)
{
try
{
HttpListener sSocket = ar.AsyncState as HttpListener; HttpListenerContext context = sSocket.EndGetContext(ar); string jg = "<html><body><h1>测试页" + sSocket.IsListening + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "</h1><h1>测试页</h1></body></html>";
// context.Response.StatusCode = 200;
context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
context.Response.Headers.Add("Server", "xx"); context.Response.ContentType = "text/html;charset=utf-8";
context.Response.ContentEncoding = Encoding.UTF8;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(jg);
context.Response.ContentLength64 = buffer.Length;
context.Response.OutputStream.Write(buffer, 0, buffer.Length); Console.WriteLine(context.Request.Url.PathAndQuery);
sSocket.BeginGetContext(new AsyncCallback(GetContextCallBack), sSocket); }
catch (Exception ex)
{
string d = ex.Message;
} }

  

   private static HttpListener listener;

        public static void demo()
{
if (listener == null)
{
listener = new HttpListener();
var url = "http://+:9876/";
listener.Prefixes.Add(url);
listener.Start();
listener.BeginGetContext(MainProcess, null);
};
} private static void MainProcess(IAsyncResult ar)
{
var context = listener.EndGetContext(ar);
listener.BeginGetContext(MainProcess, null); var response = context.Response;
response.AddHeader("Server", "M");
var request = context.Request;
var path = request.Url.LocalPath;
if (path.StartsWith("/") || path.StartsWith("\\"))
path = path.Substring(1);
var sb = new StringBuilder("输入请求:");
sb.AppendLine(path);
var visit = path.Split(new char[] { '/', '\\' }, 2);
if (visit.Length > 0)
{
var cmd = visit[0].ToLower();
sb.AppendLine(string.Format("执行命令:{0}", cmd));
sb.AppendLine(string.Format("另外有{0}个参数", visit.Length - 1 + request.QueryString.Count));
}
sb.AppendLine(DateTime.Now.ToString());
response.ContentType = "text/plain;charset=UTF-8";
var result = Encoding.UTF8.GetBytes(sb.ToString());
response.ContentLength64 = result.Length; using (var stream = response.OutputStream)
{
stream.Write(result, 0, result.Length);
}
}

  --------hao.........

using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading; namespace Bend.Util { public class HttpProcessor {
public TcpClient socket;
public HttpServer srv; private Stream inputStream;
public StreamWriter outputStream; public String http_method;
public String http_url;
public String http_protocol_versionstring;
public Hashtable httpHeaders = new Hashtable(); private static int MAX_POST_SIZE = 10 * 1024 * 1024; // 10MB public HttpProcessor(TcpClient s, HttpServer srv) {
this.socket = s;
this.srv = srv;
} private string streamReadLine(Stream inputStream) {
int next_char;
string data = "";
while (true) {
next_char = inputStream.ReadByte();
if (next_char == '\n') { break; }
if (next_char == '\r') { continue; }
if (next_char == -1) { Thread.Sleep(1); continue; };
data += Convert.ToChar(next_char);
}
return data;
}
public void process() {
// we can't use a StreamReader for input, because it buffers up extra data on us inside it's
// "processed" view of the world, and we want the data raw after the headers
inputStream = new BufferedStream(socket.GetStream()); // we probably shouldn't be using a streamwriter for all output from handlers either
outputStream = new StreamWriter(new BufferedStream(socket.GetStream()));
try {
parseRequest();
readHeaders();
if (http_method.Equals("GET")) {
handleGETRequest();
} else if (http_method.Equals("POST")) {
handlePOSTRequest();
}
} catch (Exception e) {
Console.WriteLine("Exception: " + e.ToString());
writeFailure();
}
outputStream.Flush();
// bs.Flush(); // flush any remaining output
inputStream = null; outputStream = null; // bs = null;
socket.Close();
} public void parseRequest() {
String request = streamReadLine(inputStream);
string[] tokens = request.Split(' ');
if (tokens.Length != 3) {
throw new Exception("invalid http request line");
}
http_method = tokens[0].ToUpper();
http_url = tokens[1];
http_protocol_versionstring = tokens[2]; Console.WriteLine("starting: " + request);
} public void readHeaders() {
Console.WriteLine("readHeaders()");
String line;
while ((line = streamReadLine(inputStream)) != null) {
if (line.Equals("")) {
Console.WriteLine("got headers");
return;
} int separator = line.IndexOf(':');
if (separator == -1) {
throw new Exception("invalid http header line: " + line);
}
String name = line.Substring(0, separator);
int pos = separator + 1;
while ((pos < line.Length) && (line[pos] == ' ')) {
pos++; // strip any spaces
} string value = line.Substring(pos, line.Length - pos);
Console.WriteLine("header: {0}:{1}",name,value);
httpHeaders[name] = value;
}
} public void handleGETRequest() {
srv.handleGETRequest(this);
} private const int BUF_SIZE = 4096;
public void handlePOSTRequest() {
// this post data processing just reads everything into a memory stream.
// this is fine for smallish things, but for large stuff we should really
// hand an input stream to the request processor. However, the input stream
// we hand him needs to let him see the "end of the stream" at this content
// length, because otherwise he won't know when he's seen it all! Console.WriteLine("get post data start");
int content_len = 0;
MemoryStream ms = new MemoryStream();
if (this.httpHeaders.ContainsKey("Content-Length")) {
content_len = Convert.ToInt32(this.httpHeaders["Content-Length"]);
if (content_len > MAX_POST_SIZE) {
throw new Exception(
String.Format("POST Content-Length({0}) too big for this simple server",
content_len));
}
byte[] buf = new byte[BUF_SIZE];
int to_read = content_len;
while (to_read > 0) {
Console.WriteLine("starting Read, to_read={0}",to_read); int numread = this.inputStream.Read(buf, 0, Math.Min(BUF_SIZE, to_read));
Console.WriteLine("read finished, numread={0}", numread);
if (numread == 0) {
if (to_read == 0) {
break;
} else {
throw new Exception("client disconnected during post");
}
}
to_read -= numread;
ms.Write(buf, 0, numread);
}
ms.Seek(0, SeekOrigin.Begin);
}
Console.WriteLine("get post data end");
srv.handlePOSTRequest(this, new StreamReader(ms)); } public void writeSuccess() {
outputStream.WriteLine("HTTP/1.0 200 OK");
outputStream.WriteLine("Content-Type: text/html");
outputStream.WriteLine("Connection: close");
outputStream.WriteLine("");
} public void writeFailure() {
outputStream.WriteLine("HTTP/1.0 404 File not found");
outputStream.WriteLine("Connection: close");
outputStream.WriteLine("");
}
} public abstract class HttpServer { protected int port;
TcpListener listener;
bool is_active = true; public HttpServer(int port) {
this.port = port;
} public void listen() {
listener = new TcpListener(port);
listener.Start();
while (is_active) {
TcpClient s = listener.AcceptTcpClient();
HttpProcessor processor = new HttpProcessor(s, this);
Thread thread = new Thread(new ThreadStart(processor.process));
thread.Start();
Thread.Sleep(1);
}
} public abstract void handleGETRequest(HttpProcessor p);
public abstract void handlePOSTRequest(HttpProcessor p, StreamReader inputData);
} public class MyHttpServer : HttpServer {
public MyHttpServer(int port)
: base(port) {
}
public override void handleGETRequest(HttpProcessor p) {
Console.WriteLine("request: {0}", p.http_url);
p.writeSuccess();
p.outputStream.WriteLine("<html><body><h1>test server</h1>");
p.outputStream.WriteLine("Current Time: " + DateTime.Now.ToString());
p.outputStream.WriteLine("url : {0}", p.http_url); p.outputStream.WriteLine("<form method=post action=/form>");
p.outputStream.WriteLine("<input type=text name=foo value=foovalue>");
p.outputStream.WriteLine("<input type=submit name=bar value=barvalue>");
p.outputStream.WriteLine("</form>");
} public override void handlePOSTRequest(HttpProcessor p, StreamReader inputData) {
Console.WriteLine("POST request: {0}", p.http_url);
string data = inputData.ReadToEnd(); p.outputStream.WriteLine("<html><body><h1>test server</h1>");
p.outputStream.WriteLine("<a href=/test>return</a><p>");
p.outputStream.WriteLine("postbody: <pre>{0}</pre>", data); }
} public class TestMain {
public static int Main(String[] args) {
HttpServer httpServer;
if (args.GetLength(0) > 0) {
httpServer = new MyHttpServer(Convert.ToInt16(args[0]));
} else {
httpServer = new MyHttpServer(8080);
}
Thread thread = new Thread(new ThreadStart(httpServer.listen));
thread.Start();
return 0;
} } }

  

-----------------------------------------------------

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO; namespace CSocketServer
{
public class SocketObject
{
public Socket CSocket = null;
public const int BufferSize = 8;
public byte[] Buffer = new byte[BufferSize];
public StringBuilder DataBuilder = new StringBuilder();
} class Program
{
static void Main(string[] args)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint point = new IPEndPoint(IPAddress.Any, 55000); socket.Bind(point);
socket.Listen(100); Console.WriteLine("Waiting For Client Connect..."); socket.BeginAccept(new AsyncCallback(AcceptCallBack), socket);
Console.Read();
} static void AcceptCallBack(IAsyncResult ar)
{
Socket socket = (Socket)ar.AsyncState;
Socket handler = socket.EndAccept(ar);
socket.BeginAccept(new AsyncCallback(AcceptCallBack), socket);
SocketObject obj = new SocketObject();
obj.CSocket = handler;
handler.BeginReceive(obj.Buffer, 0, SocketObject.BufferSize, SocketFlags.None,
new AsyncCallback(ReceiveCallBack), obj);
} static void ReceiveCallBack(IAsyncResult ar)
{
SocketObject obj = (SocketObject)ar.AsyncState;
Socket socket = obj.CSocket; int bytesRead = socket.EndReceive(ar);
string data = string.Empty;
if (bytesRead > 0)
{
obj.DataBuilder.Append(Encoding.Default.GetString(obj.Buffer, 0, bytesRead)); socket.BeginReceive(obj.Buffer, 0, SocketObject.BufferSize, SocketFlags.None,
new AsyncCallback(ReceiveCallBack), obj);
}
else
{
File.WriteAllText(string.Format(@"D:\{0}.txt", DateTime.Now.ToString("MMddHHmmssfff")), obj.DataBuilder.ToString());
// Console.WriteLine(obj.DataBuilder.ToString());
Console.WriteLine("Received {0} Bytes Data...", Encoding.Default.GetBytes(obj.DataBuilder.ToString()).Length);
} }
}
}

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Web;
using System.IO;
using Newtonsoft.Json; namespace HttpListenerApp
{
/// <summary>
/// HttpRequest逻辑处理
/// </summary>
public class HttpProvider
{ private static HttpListener httpFiledownload; //文件下载处理请求监听
private static HttpListener httOtherRequest; //其他超做请求监听 /// <summary>
/// 开启HttpListener监听
/// </summary>
public static void Init()
{
httpFiledownload = new HttpListener(); //创建监听实例
httpFiledownload.Prefixes.Add("http://10.0.0.217:20009/FileManageApi/Download/"); //添加监听地址 注意是以/结尾。
httpFiledownload.Start(); //允许该监听地址接受请求的传入。
Thread ThreadhttpFiledownload = new Thread(new ThreadStart(GethttpFiledownload)); //创建开启一个线程监听该地址得请求
ThreadhttpFiledownload.Start(); httOtherRequest = new HttpListener();
httOtherRequest.Prefixes.Add("http://10.0.0.217:20009/BehaviorApi/EmailSend/"); //添加监听地址 注意是以/结尾。
httOtherRequest.Start(); //允许该监听地址接受请求的传入。
Thread ThreadhttOtherRequest = new Thread(new ThreadStart(GethttOtherRequest));
ThreadhttOtherRequest.Start();
} /// <summary>
/// 执行文件下载处理请求监听行为
/// </summary>
public static void GethttpFiledownload()
{
while (true)
{
HttpListenerContext requestContext = httpFiledownload.GetContext(); //接受到新的请求
try
{
//reecontext 为开启线程传入的 requestContext请求对象
Thread subthread = new Thread(new ParameterizedThreadStart((reecontext) =>
{
Console.WriteLine("执行文件处理请求监听行为"); var request = (HttpListenerContext)reecontext;
var image = HttpUtility.UrlDecode(request.Request.QueryString["imgname"]); //接受GET请求过来的参数;
string filepath = AppDomain.CurrentDomain.BaseDirectory + image;
if (!File.Exists(filepath))
{
filepath = AppDomain.CurrentDomain.BaseDirectory + "default.jpg"; //下载默认图片
}
using (FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length); //将文件读到缓存区
request.Response.StatusCode = 200;
request.Response.Headers.Add("Access-Control-Allow-Origin", "*");
request.Response.ContentType = "image/jpg";
request.Response.ContentLength64 = buffer.Length;
var output = request.Response.OutputStream; //获取请求流
output.Write(buffer, 0, buffer.Length); //将缓存区的字节数写入当前请求流返回
output.Close();
}
}));
subthread.Start(requestContext); //开启处理线程处理下载文件
}
catch (Exception ex)
{
try
{
requestContext.Response.StatusCode = 500;
requestContext.Response.ContentType = "application/text";
requestContext.Response.ContentEncoding = Encoding.UTF8;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes("System Error");
//对客户端输出相应信息.
requestContext.Response.ContentLength64 = buffer.Length;
System.IO.Stream output = requestContext.Response.OutputStream;
output.Write(buffer, 0, buffer.Length);
//关闭输出流,释放相应资源
output.Close();
}
catch { }
}
}
} /// <summary>
/// 执行其他超做请求监听行为
/// </summary>
public static void GethttOtherRequest()
{
while (true)
{
HttpListenerContext requestContext = httOtherRequest.GetContext(); //接受到新的请求
try
{
//reecontext 为开启线程传入的 requestContext请求对象
Thread subthread = new Thread(new ParameterizedThreadStart((reecontext) =>
{
Console.WriteLine("执行其他超做请求监听行为");
var request = (HttpListenerContext)reecontext;
var msg = HttpUtility.UrlDecode(request.Request.QueryString["behavior"]); //接受GET请求过来的参数;
//在此处执行你需要进行的操作>>比如什么缓存数据读取,队列消息处理,邮件消息队列添加等等。 request.Response.StatusCode = 200;
request.Response.Headers.Add("Access-Control-Allow-Origin", "*");
request.Response.ContentType = "application/json";
requestContext.Response.ContentEncoding = Encoding.UTF8;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new { success = true, behavior = msg }));
request.Response.ContentLength64 = buffer.Length;
var output = request.Response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
}));
subthread.Start(requestContext); //开启处理线程处理下载文件
}
catch (Exception ex)
{
try
{
requestContext.Response.StatusCode = 500;
requestContext.Response.ContentType = "application/text";
requestContext.Response.ContentEncoding = Encoding.UTF8;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes("System Error");
//对客户端输出相应信息.
requestContext.Response.ContentLength64 = buffer.Length;
System.IO.Stream output = requestContext.Response.OutputStream;
output.Write(buffer, 0, buffer.Length);
//关闭输出流,释放相应资源
output.Close();
}
catch { }
}
}
}
}
}

  ----------------------------------------

private static void AddFireWallPort(int port)
{
string argsDll = String.Format(@"firewall set portopening TCP {0} ENABLE", port);
ProcessStartInfo psi = new ProcessStartInfo("netsh", argsDll);
psi.Verb = "runas";
psi.CreateNoWindow = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
Process.Start(psi).WaitForExit();
}

  

Socket HttpListen的更多相关文章

  1. socket读写返回值的处理

    在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...

  2. Socket聊天程序——Common

    写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...

  3. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  4. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  5. Socket聊天程序——初始设计

    写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...

  6. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  7. Android Socket连接PC出错问题及解决

    最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.

  8. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

  9. Mono 3.2.3 Socket功能迎来一稳定的版本

    由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...

随机推荐

  1. 关于Java正则和转义中\\和\\\\的理解

    定义 一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. 转义就是指转换该字符的原本意义,从而变成另外的意义. \作为Java的转义字符 1.在j ...

  2. hotspot编译

    "AA=="1",==", /usr/bin/make -s VERBOSE="-s" LOG_LEVEL="warn" ...

  3. SpringCloud Feign 常用代码

    服务提供者 服务提供者,是位于其他项目里面的. 服务提供者提供的方法,在Controller层里面,有可访问的Url. @Controller @RequestMapping("/order ...

  4. 使用OSCache优化性能,及JPA二级缓存

    1.使用静态化页面技术: 要统计产品的浏览次数: 在<body> <img src="http://www.site.com/data/count.do?productId ...

  5. how does SELECT TOP works when no order by is specified?

    how does SELECT TOP works when no order by is specified? There is no guarantee which two rows you ge ...

  6. Spark(五十三):Spark RPC初尝试使用

    基本用法主要掌握一点就行: master slave模式运用:driver 就是master,executor就是slave. 如果executor要想和driver交互必须拿到driver的Endp ...

  7. 性能测试分析过程(二)cpu 使用率过高的分析方法

    Linux 系统下 cpu 使用率过高的分析方法 1.通过 top 命令可以很明显查看出哪个进程耗cpu比较高 2. ps -mp 25147-o THREAD,tid,time\top -Hp pi ...

  8. Python推荐一整套开发工具

    原文:https://sourcery.ai/blog/python-best-practices/ 在开始一个新的Python项目时,很容易不做规划直接进入编码环节.花费少量时间,用最好的工具设置项 ...

  9. SQL Server 变量定义

    declare @id intdeclare @name char(10) --注意:char(10)为10位,要是位数小了会让数据出错set @id=1 set @name='sssss'selec ...

  10. nfs高可用

      一.简介 NFS是单点的,如果一个节点出现问题,那使用它挂载服务的都将出现问题.所以需要高可用,挂掉一台不影响.采用keepalived+rsync+inotify-tools 环境: ubunt ...