【问题标题】:How to send image as an HTTP response using TcpClient如何使用 TcpClient 将图像作为 HTTP 响应发送
【发布时间】:2020-01-03 07:15:22
【问题描述】:

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

客户使用他们的网络浏览器与服务器联系。

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

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

我试过了:

  • 读取图像文件为String
  • 读取图像文件为Byte[]

在 Chrome 开发者控制台中进行一些搜索后,我发现了一个错误 net::ERR_CONTENT_LENGTH_MISMATCH.

我不知道为什么 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
  • 读取MemoryStreamNetworkStream中的图像文件进行写入。
  • 将图像文件读取为 byte[] 并将其转换为 Base64。

【问题讨论】:

  • 你应该显示监听器和客户端的代码

标签: c# image http-headers tcpclient tcplistener


【解决方案1】:

问题是因为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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多