主页 > 编程资料 > C# >
发布时间:2015-09-26 作者:网络 阅读:262次

今天早上 我写了一篇 用socket 做的 时间服务器,当时我说准备用一段时间作个不需要客户端接收数据
而是用 浏览器 接收数据的程序,很顺利,一天的时间 我就做好了:)
闲话不说,先看程序。。。

using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;

class HttpProcessor {

private Socket s;
private BufferedStream bs;
private StreamReader sr;
private StreamWriter sw;
private String method;
private String url;
private String protocol;
private Hashtable hashTable;

public HttpProcessor(Socket s) {
this.s = s;
hashTable = new Hashtable(,',',');
}

public void process() {
NetworkStream ns = new NetworkStream(s, FileAccess.ReadWrite,',',');
bs = new BufferedStream(ns,',',');
sr = new StreamReader(bs,',',');
sw = new StreamWriter(bs,',',');
writeURL(,',',');
s.Shutdown(SocketShutdown.SdBoth,',',');
ns.Close(,',',');
}
public void writeURL() {
try {
writeSuccess(,',',');
} catch(FileNotFoundException) {
writeFailure(,',',');
sw.WriteLine("File not found: " + url,',',');
}
sw.Flush(,',',');
}

public void writeSuccess() {
sw.WriteLine("HTTP/1.1 200 OK",',',');
sw.WriteLine("Server: Microsoft-IIS/5.0",',',');
sw.WriteLine("Date: Mon, 27 Nov 2000 08:19:43 GMT",',',');
sw.WriteLine("Content-Length: 6",',',');
sw.WriteLine("Content-Type: text/html",',',');
sw.WriteLine("",',',');

String strDateLine;
DateTime now;
now = DateTime.Now;
strDateLine = now.ToShortDateString() + " " + now.ToLongTimeString(,',',');
sw.WriteLine(strDateLine,',',');
}

public void writeFailure() {
sw.WriteLine("HTTP/1.0 404 File not found",',',');
sw.WriteLine("Connection: close",',',');
sw.WriteLine(,',',');
}
}

public class HttpServer {
public HttpServer() : this(81) {
}

public HttpServer(int port) {
this.port = port;
}
public void listen() {
Socket listener = new Socket(0, SocketType.SockStream, ProtocolType.ProtTCP,',',');
IPAddress ipaddress = new IPAddress("169.254.0.244",',',');
IPEndPoint endpoint = new IPEndPoint(ipaddress, port,',',');
listener.Bind(endpoint,',',');
listener.Blocking = true;
listener.Listen(-1,',',');
Console.WriteLine("Press Ctrl+c to Quit...",',',');
while(true) {
Socket s = listener.Accept(,',',');
HttpProcessor processor = new HttpProcessor(s,',',');
Thread thread = new Thread(new ThreadStart(processor.process),',',');
thread.Start(,',',');
}
}
public static int Main(String[] args) {
HttpServer httpServer;
if(args.GetLength(0) > 0) {
httpServer = new HttpServer(args[0].ToUInt16(),',',');
} else {
httpServer = new HttpServer(,',',');
}
Thread thread = new Thread(new ThreadStart(httpServer.listen),',',');
thread.Start(,',',');
return 0;
}
}

关键字词: