【发布时间】: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。 - 读取
MemoryStream和NetworkStream中的图像文件进行写入。 - 将图像文件读取为 byte[] 并将其转换为 Base64。
【问题讨论】:
-
你应该显示监听器和客户端的代码
标签: c# image http-headers tcpclient tcplistener