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. centos6 启动docker报错

    1.启动docker报错: # service docker stop Stopping docker: [ OK ] [root@RSING data2]# service docker start ...

  2. Linux 把进程为D(不可中断进程)转换成其他状态

    问题现象:当前集群跑hadoop的时候,,任务失败,但是跑任务的容器没有正常退出,显示一大堆的YarcChild进程,,more /proc/进程/status   查看其状态,进程为D(disk s ...

  3. maven 发现有一个包 需要升级包版本

    maven有个包需要升级版本号,但是升级完了之后,怎么编译都是原来的: 后来修改了一下版本号,然后编译,就好了,再把版本号改回来就行了: 本地版本库地址:File==>Other Setting ...

  4. 第06组 Beta冲刺(3/4)

    队名:福大帮 组长博客链接: 作业博客 : https://edu.cnblogs.com/campus/fzu/SoftwareEngineeringClassAofFuzhouUniversity ...

  5. linux声卡录音和播放(alsa方法)

    前言 客户购买多台UNO-2184,使用fedora23系统进行视频监控,视频监控的同时,也要同步采集现场画面的声音,原来系统采用的是fedora 14,之前是通过操作/dev/bsp,对声卡进行操作 ...

  6. openstackx

  7. Xamarin图表开发基础教程(6)OxyPlot框架

    Xamarin图表开发基础教程(6)OxyPlot框架 Xamamin iOS中绘制线图OxyPlotiOSDemo [示例OxyPlotiOSDemo]下面将实现线图的显示.具体的操作步骤如下: ( ...

  8. typescript - 2.数据类型

    typescript中为了使编写的代码更规范,更有利于维护,增加了类型校验,在typescript中主要给我们提供了以下数据类型 布尔类型(boolean) 数字类型(number) 字符串类型(st ...

  9. Leetcode: Split BST

    Given a Binary Search Tree (BST) with root node root, and a target value V, split the tree into two ...

  10. PAT 甲级 1076 Forwards on Weibo (30分)(bfs较简单)

    1076 Forwards on Weibo (30分)   Weibo is known as the Chinese version of Twitter. One user on Weibo m ...