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 
    }
}