简单的c# Http/TCP服务器
本文关键字:TCP 服务器 Http 简单 | 更新日期: 2023-09-27 17:52:16
我正在尝试实现一个简单的http csharp服务器,当用户通过服务器IP连接时,它会发送一个文档,如index.html到浏览器。我目前有点困惑,我将如何去发送一个简单的。html文档通过web浏览器,以便连接用户可以看到它。
输出是所有信息被发送到浏览器的地方。
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace TCP_Socket
{
class ConnectionThread
{
public ConnectionThread(Socket socketToHandleConnection)
{
connection = socketToHandleConnection;
}
Socket connection = null; //TCP/IP socket to handle the actual connection
NetworkStream connectionStream = null;
BinaryReader inStream = null;
BinaryWriter outStream = null;
String userName = null;
public void run()
{
connectionStream = new NetworkStream(connection);
inStream = new BinaryReader(connectionStream);
outStream = new BinaryWriter(connectionStream);
userName = Environment.UserName;
byte b = 0;
String s = ""; //This will contain all the stuff the browser transmitted,
//but "all in one go".
try
{
while (connectionStream.DataAvailable)
{
b = (byte)inStream.ReadSByte();
Console.Out.Write((char)b);
s += (char)b;
}
String[] items = s.Split();//This will contain all the stuff the browser transmitted,
}
catch (EndOfStreamException eos)
{
Console.Out.WriteLine("Unexpected end of stream.");
Console.Out.WriteLine("Error caused by " + eos.Message);
}
Console.Out.WriteLine("End of stream.");
String stringOut = "HTTP/ 1.1 200 OK'r'n";
outStream.Write(stringOut.ToCharArray());
stringOut = "Content-Type: text/html'r'n";
outStream.Write(stringOut.ToCharArray());
stringOut = "Date: ";
outStream.Write(stringOut.ToCharArray());
stringOut = Convert.ToString(DateTime.Now);
outStream.Write(stringOut.ToCharArray());
stringOut = "'r'n";
outStream.Write(stringOut.ToCharArray());
stringOut = "<!DOCTYPE HTML PUBLIC '"-//W3C//DTD HTML 4.0 Transitional//EN'">'r'n";
outStream.Write(stringOut.ToCharArray());
stringOut = "<html>'r'n";
outStream.Write(stringOut.ToCharArray());
stringOut = "<body>'r'n";
outStream.Write(stringOut.ToCharArray());
stringOut = "Welcome to <strong>" + userName + "'s </strong>primative HTTP server";
outStream.Write(stringOut.ToCharArray());
stringOut = "</body></html>'r'n";
outStream.Write(stringOut.ToCharArray());
inStream.Close();
outStream.Flush();
outStream.Close();
connectionStream.Close();
connection.Close();
Console.Out.WriteLine("Done; Connection closed.");
}
}
}
您不需要使用套接字编写所有HTTP代码,因为。net 2.0已经提供了HttpListener。如果符合你的要求,可以试一试。
经过搜索,我找到了一些其他的解决方案:
其他类似的嵌入式服务器包括:
- HTTP服务器框架c#示例
- 嵌入式。net HTTP服务器
- 系统。.NET HttpListener(基于。Net Framework 3.5 SP1)
- zeroconf.codeplex.com中提供的HTTP服务器
- c#中简单的HTTP服务器