C#Web服务器仅向客户端发送HTML代码 public void Initialise() { listener=新的StreamSocketListener(); //在端口80上侦听,这是标准HTTP端口(如果您的服务已在80上运行,请使用其他端口) listener.BindServiceNameAsync(“80”).AsTask(); listener.ConnectionReceived+=async(发送方,参数)=> { //当请求传入时调用handlerequest函数 HandlerRequest(发送方,args); }; 公共异步void HandleRequest(StreamSocketListener发送方、StreamSocketListenerConnectionReceivedEventArgs参数) { StringBuilder请求=新建StringBuilder(); //处理传入的请求 //首先阅读请求 使用(IInputStream输入=args.Socket.InputStream) { 字节[]数据=新字节[BufferSize]; IBuffer buffer=data.AsBuffer(); uint dataRead=缓冲区大小; while(dataRead==BufferSize) { wait input.ReadAsync(缓冲区、缓冲区大小、InputStreamOptions.Partial); Append(Encoding.UTF8.GetString(data,0,data.Length)); dataRead=buffer.Length; } } //回复 使用(IOutputStream output=args.Socket.OutputStream) { 使用(Stream response=output.AsStreamForWrite()) { //现在我们只想用Hello World回复任何事情! //byte[]bodyArray=Encoding.UTF8.GetBytes(“你好,世界!”); 字符串页=”; var folder=Windows.ApplicationModel.Package.Current.InstalledLocation; var file=await folder.GetFileAsync(“index.html”); var readFile=wait Windows.Storage.FileIO.ReadLinesAsync(文件); foreach(readFile中的var行) { 页面+=行; } byte[]bodyArray=Encoding.UTF8.GetBytes(第页); var bodyStream=新内存流(bodyArray); //这是一个标准HTTP头,因此客户端浏览器知道返回的字节是有效的HTTP响应 var header=“HTTP/1.1 200正常\r\n”+ $“内容长度:{bodyStream.Length}\r\n”+ “连接:关闭\r\n\r\n”; byte[]headerArray=Encoding.UTF8.GetBytes(标头); //将包含正文的标题发送到客户端 wait response.WriteAsync(headerray,0,headerray.Length); 等待bodyStream.CopyToAsync(响应); 等待响应。FlushAsync(); } } } 私有StreamSocketListener listener;//用于侦听TCP请求的套接字listener //注意:这必须在范围内! private const uint BufferSize=8192;//这是缓冲区的最大大小(以字节为单位) } }
你好,C#Web服务器仅向客户端发送HTML代码 public void Initialise() { listener=新的StreamSocketListener(); //在端口80上侦听,这是标准HTTP端口(如果您的服务已在80上运行,请使用其他端口) listener.BindServiceNameAsync(“80”).AsTask(); listener.ConnectionReceived+=async(发送方,参数)=> { //当请求传入时调用handlerequest函数 HandlerRequest(发送方,args); }; 公共异步void HandleRequest(StreamSocketListener发送方、StreamSocketListenerConnectionReceivedEventArgs参数) { StringBuilder请求=新建StringBuilder(); //处理传入的请求 //首先阅读请求 使用(IInputStream输入=args.Socket.InputStream) { 字节[]数据=新字节[BufferSize]; IBuffer buffer=data.AsBuffer(); uint dataRead=缓冲区大小; while(dataRead==BufferSize) { wait input.ReadAsync(缓冲区、缓冲区大小、InputStreamOptions.Partial); Append(Encoding.UTF8.GetString(data,0,data.Length)); dataRead=buffer.Length; } } //回复 使用(IOutputStream output=args.Socket.OutputStream) { 使用(Stream response=output.AsStreamForWrite()) { //现在我们只想用Hello World回复任何事情! //byte[]bodyArray=Encoding.UTF8.GetBytes(“你好,世界!”); 字符串页=”; var folder=Windows.ApplicationModel.Package.Current.InstalledLocation; var file=await folder.GetFileAsync(“index.html”); var readFile=wait Windows.Storage.FileIO.ReadLinesAsync(文件); foreach(readFile中的var行) { 页面+=行; } byte[]bodyArray=Encoding.UTF8.GetBytes(第页); var bodyStream=新内存流(bodyArray); //这是一个标准HTTP头,因此客户端浏览器知道返回的字节是有效的HTTP响应 var header=“HTTP/1.1 200正常\r\n”+ $“内容长度:{bodyStream.Length}\r\n”+ “连接:关闭\r\n\r\n”; byte[]headerArray=Encoding.UTF8.GetBytes(标头); //将包含正文的标题发送到客户端 wait response.WriteAsync(headerray,0,headerray.Length); 等待bodyStream.CopyToAsync(响应); 等待响应。FlushAsync(); } } } 私有StreamSocketListener listener;//用于侦听TCP请求的套接字listener //注意:这必须在范围内! private const uint BufferSize=8192;//这是缓冲区的最大大小(以字节为单位) } },c#,http,server,C#,Http,Server,你好, 我在我的c#程序中实现了一个http服务器,向客户端发送一个webinterface。这个webinterface(index.html)包括一些css样式和js方法。我的问题是,客户端浏览器只显示html代码,而不显示样式等。如何将包含所有webinterface文件的“完整”文件夹发送到客户端?引用了js文件的样式。浏览器将使用相同的css和js连接分别发出请求。您的代码在处理第一个请求后结束。当我在客户端浏览器中输入服务器的ip时,客户端会请求index.html,对吗?html中
我在我的c#程序中实现了一个http服务器,向客户端发送一个webinterface。这个webinterface(index.html)包括一些css样式和js方法。我的问题是,客户端浏览器只显示html代码,而不显示样式等。如何将包含所有webinterface文件的“完整”文件夹发送到客户端?引用了js文件的样式。浏览器将使用相同的css和js连接分别发出请求。您的代码在处理第一个请求后结束。当我在客户端浏览器中输入服务器的ip时,客户端会请求index.html,对吗?html中引用了css和javascript。引用是否自动启动新请求?我怎样才能解决我的问题?我必须单独解析请求并发送所有文件吗?@Ollifred是的,您必须单独解析并发送所有文件,这意味着您的代码需要一种方法来识别请求的文件。作为旁注,为什么您要尝试这样做,而不是使用其他更常见、经过测试的服务器实现之一,这些实现已经与.net framework捆绑在一起?假设您有充分的理由支持您的方法,加载HTML时从服务器读取CSS的唯一其他合理方法是将样式表直接嵌入HTML页面。外部javascript引用也是如此。
public void Initialise()
{
listener = new StreamSocketListener();
// listen on port 80, this is the standard HTTP port (use a different port if you have a service already running on 80)
listener.BindServiceNameAsync("80").AsTask();
listener.ConnectionReceived += async (sender, args) =>
{
// call the handle request function when a request comes in
HandleRequest(sender, args);
};
public async void HandleRequest(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
StringBuilder request = new StringBuilder();
// Handle a incoming request
// First read the request
using (IInputStream input = args.Socket.InputStream)
{
byte[] data = new byte[BufferSize];
IBuffer buffer = data.AsBuffer();
uint dataRead = BufferSize;
while (dataRead == BufferSize)
{
await input.ReadAsync(buffer, BufferSize, InputStreamOptions.Partial);
request.Append(Encoding.UTF8.GetString(data, 0, data.Length));
dataRead = buffer.Length;
}
}
// Send a response back
using (IOutputStream output = args.Socket.OutputStream)
{
using (Stream response = output.AsStreamForWrite())
{
// For now we are just going to reply to anything with Hello World!
//byte[] bodyArray = Encoding.UTF8.GetBytes("<html><body>Hello, World!</body></html>");
string page = "";
var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var file = await folder.GetFileAsync("index.html");
var readFile = await Windows.Storage.FileIO.ReadLinesAsync(file);
foreach(var line in readFile)
{
page += line;
}
byte[] bodyArray = Encoding.UTF8.GetBytes(page);
var bodyStream = new MemoryStream(bodyArray);
// This is a standard HTTP header so the client browser knows the bytes returned are a valid http response
var header = "HTTP/1.1 200 OK\r\n" +
$"Content-Length: {bodyStream.Length}\r\n" +
"Connection: close\r\n\r\n";
byte[] headerArray = Encoding.UTF8.GetBytes(header);
// send the header with the body included to the client
await response.WriteAsync(headerArray, 0, headerArray.Length);
await bodyStream.CopyToAsync(response);
await response.FlushAsync();
}
}
}
private StreamSocketListener listener; // the socket listner to listen for TCP requests
// Note: this has to stay in scope!
private const uint BufferSize = 8192; // this is the max size of the buffer in bytes
}
}