C# 如何使用TcpClient将映像作为HTTP响应发送

C# 如何使用TcpClient将映像作为HTTP响应发送,c#,image,http-headers,tcpclient,tcplistener,C#,Image,Http Headers,Tcpclient,Tcplistener,在我的工作中,我将服务器和客户端(几个设备)连接到同一个网络 客户端使用其web浏览器与服务器联系 服务器正在运行一个C程序,该程序使用TcpListener接收来自浏览器的请求 我试图通过TcpClient向客户端设备发送图像,但结果如下: 我已经试过了: TcpListener Listener = new TcpListener(local_address, 9090); Listener.Start(); TcpClient client = Listener.AcceptTcpCl

在我的工作中,我将服务器和客户端(几个设备)连接到同一个网络

客户端使用其web浏览器与服务器联系

服务器正在运行一个C程序,该程序使用
TcpListener
接收来自浏览器的请求

我试图通过
TcpClient
向客户端设备发送图像,但结果如下:

我已经试过了:

TcpListener Listener = new TcpListener(local_address, 9090);
Listener.Start();

TcpClient client = Listener.AcceptTcpClient();
NetworkStream ns = client.GetStream();

string target = HeaderKeys.GetValue("target"); /* image file in the request*/ 
string mime_type = MimeType.Extract(target); /* mime-type of the file */

byte[] content = File.ReadAllBytes(target);

StreamWriter writer = new StreamWriter(ns);
// response header
writer.Write("HTTP/1.0 200 OK");
writer.Write(Environment.NewLine);
writer.Write($"Content-Type: {mime_type}");
writer.Write(Environment.NewLine);
writer.Write("Content-Length: " + content.Length);
writer.Write(Environment.NewLine);
writer.Write(Environment.NewLine);
writer.Write(content);
writer.Flush();
client.Close();
  • 将图像文件读取为
    字符串
  • 将图像文件读取为
    字节[]
在ChromeDeveloper控制台中进行了一些搜索之后,我发现了一个错误
net::ERR\u内容\u长度\u不匹配

我不知道为什么
Content Length:Length in byte
值不正确,即使通过
new FileInfo(Target).Length

我使用的代码:

TcpListener Listener = new TcpListener(local_address, 9090);
Listener.Start();

TcpClient client = Listener.AcceptTcpClient();
NetworkStream ns = client.GetStream();

string target = HeaderKeys.GetValue("target"); /* image file in the request*/ 
string mime_type = MimeType.Extract(target); /* mime-type of the file */

byte[] content = File.ReadAllBytes(target);

StreamWriter writer = new StreamWriter(ns);
// response header
writer.Write("HTTP/1.0 200 OK");
writer.Write(Environment.NewLine);
writer.Write($"Content-Type: {mime_type}");
writer.Write(Environment.NewLine);
writer.Write("Content-Length: " + content.Length);
writer.Write(Environment.NewLine);
writer.Write(Environment.NewLine);
writer.Write(content);
writer.Flush();
client.Close();
我已经试过了

  • NetworkStream
    直接连接
  • MemoryStream
    NetworkStream
    中读取图像文件进行写入
  • 将图像文件读取为字节[],并将其转换为Base64

问题是因为
StreamWriter

我已使用以下代码解决了此问题:

    TcpClient client = Listener.AcceptTcpClient();
    Stream s = client.GetStream();

    byte[] file_content = File.ReadAllBytes(file);

    StringBuilder header = new StringBuilder();

    header.Append("HTTP/1.1 200 OK\r\n");
    header.Append($"Content-Type: {mime_type}\r\n");
    header.Append($"Content-Length: {file_content .Length}\r\n\n");

    byte[] h = Encoding.ASCII.GetBytes(header.ToString());

    s.Write(content, 0, content.Length);
    s.Write(b, 0, b.Length);
    s.Flush();

    client.Close();

您应该显示侦听器和客户端的代码