c#Web服务器-如何发送图像

c#Web服务器-如何发送图像,c#,html,image,server,hosting,C#,Html,Image,Server,Hosting,我正在使用C#创建一个服务器,我能够接收请求并返回HTML,但我不确定我必须做什么才能发送图像文件以便它们显示在页面上 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; using System.IO; namespace Ambar { class Program {

我正在使用C#创建一个服务器,我能够接收请求并返回HTML,但我不确定我必须做什么才能发送图像文件以便它们显示在页面上

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;

namespace Ambar
{
    class Program
    {


        static void Main(string[] args)
        {
            TcpListener listener = new TcpListener(80);
            listener.Start();
            while (true)
            {
                Console.WriteLine("waiting for a connection");
                TcpClient client = listener.AcceptTcpClient();

                StreamReader sr = new StreamReader(client.GetStream());
                StreamWriter sw = new StreamWriter(client.GetStream());
                Console.WriteLine(client.GetStream().ToString());

                try
                {
                    string request = sr.ReadLine();

                    Console.WriteLine(request);
                    string[] tokens = request.Split(' ');
                    string page = tokens[1];
                    if (page == "/")
                    {
                        page = "/default.htm";
                    }
                    StreamReader file = new StreamReader("../../web" + page);
                    sw.WriteLine("HTTP/1.0 200 OK\n");

                    string data = file.ReadLine();
                    while (data != null)
                    {
                        sw.WriteLine(data);
                        sw.Flush();
                        data = file.ReadLine();
                    }
                }
                catch (Exception e)
                {
                    sw.WriteLine("HTTP/1.0 404 OK\n");
                    sw.WriteLine("<H1> Future Site of Ambar Remake </H!>");
                    sw.Flush();
                }

                client.Close();
            }
        }
    }
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Net.Sockets;
Net系统;
使用System.IO;
名称空间Ambar
{
班级计划
{
静态void Main(字符串[]参数)
{
TcpListener侦听器=新TcpListener(80);
listener.Start();
while(true)
{
Console.WriteLine(“等待连接”);
TcpClient client=listener.AcceptTcpClient();
StreamReader sr=新的StreamReader(client.GetStream());
StreamWriter sw=新的StreamWriter(client.GetStream());
Console.WriteLine(client.GetStream().ToString());
尝试
{
字符串请求=sr.ReadLine();
控制台写入线(请求);
string[]tokens=request.Split(“”);
字符串页=令牌[1];
如果(第页==“/”)
{
page=“/default.htm”;
}
StreamReader文件=新的StreamReader(“../../web”+页面);
sw.WriteLine(“HTTP/1.0 200 OK\n”);
字符串数据=file.ReadLine();
while(数据!=null)
{
软件写入线(数据);
sw.Flush();
data=file.ReadLine();
}
}
捕获(例外e)
{
sw.WriteLine(“HTTP/1.0 404 OK\n”);
sw.WriteLine(“安巴尔翻拍的未来地点”);
sw.Flush();
}
client.Close();
}
}
}
我可以托管任何我想要的HTML,但是如果我试图显示一个像


我不确定如何承载该图像并将其显示在那里。

我假设您使用的是web套接字

您需要以base64编码字符串的形式返回图像,然后使用

<img src ="data:image/png;base64," + base64ImageHere


格式

HTTP请求和响应标头有两个换行符(\n)用于划分标头部分和内容部分

例如:
请求从服务器请求图像(image.gif)

响应图像请求)

就是这样。我希望你能理解我糟糕的英语:O。
希望这对您有所帮助!

您是否尝试以二进制格式发送图像?
GET /image.gif HTTP/1.1
User-Agent: WebBrowser
Accept-Encoding: deflate,gzip
Connection: keep-alive
... and more headers if present ...
HTTP/1.1 200 OK
Content-Length: <Length_Of_Content>
Content-Type: image/gif
... and more headers if present ...

<Data_Of_Image>
NetworkStream ns = client.GetStream();

...

string[] tokens = request.Split(' ');
string page = tokens[1];
if (page == "/")
{
    page = "/default.htm";
}
//StreamReader file = new StreamReader("../../web" + page);
byte[] file = null;

try { file = File.ReadAllBytes(@"../../web" + page); }

// In this 'catch' block, you can't read requested file.
catch {
    // do something (like printing error message)
}

// We are not going to use StreamWriter, we'll use StringBuilder
StringBuilder sbHeader = new StringBuilder();

// STATUS CODE
sbHeader.AppendLine("HTTP/1.1 200 OK");

// CONTENT-LENGTH
sbHeader.AppendLine("Content-Length: " + file.Length);

// Append one more line breaks to seperate header and content.
sbHeader.AppendLine();

// List for join two byte arrays.
List<byte> response = new List<byte>();

// First, add header.
response.AddRange(Encoding.ASCII.GetBytes(sbHeader.ToString()));

// Last, add content.
response.AddRange(file);

// Make byte array from List<byte>
byte[] responseByte = response.ToArray();

// Send entire response via NetworkStream
ns.Write(responseByte, 0, responseByte.Length);