我在C#中开发自己的简单网络服务器,并且我有正常的html文件和子文件夹等,并且工作正常......但我的问题在于发送PNG文件。
一旦浏览器发出HTTP请求并且其他代码完成了它的魔力,我需要发送一个响应头。这是我的代码:
else if (URL.EndsWith(".ico") || URL.EndsWith(".png"))
{
if (File.Exists(Program.Start_Directory + URL))
{
byte[] ImgFile = File.ReadAllBytes(Program.Start_Directory + URL);
sw.Write("HTTP/1.0 200 OK\r\n");
sw.Write("Content-Type: image/png\r\n");
sw.Write("Content-Length: " + ImgFile.Length + "\r\n");
sw.Write("\r\n");
sw.Write(ImgFile);
}
else
{
FileNotFoundPage(sw);
}
}
此实例中的sw是与浏览器的套接字连接的StreamWriter。
当我运行它时,浏览器屏幕变黑,就像它正在加载图像时一样,但没有图像加载,旋转的加载轮无限期地保持旋转状态。
我怎样才能让它发挥作用?感谢。
答案 0 :(得分:0)
当您使用CREATE PROCEDURE test
@table_name_one NVARCHAR(MAX),
@table_name_two NVARCHAR(MAX),
@threshhold FLOAT(53)
AS
BEGIN
SET NOCOUNT ON;
SELECT @table_name_one
END
GO
EXEC test @table_name_one = 'a', @table_name_two = 'b', @threshhold = 1./3
(用于将具有特定StreamWriter
的字符串写入流中)与二进制数据一起使用时,事情会变得混乱。
看起来你正在调用Encoding
的{{3}}重载,并认为它将字节逐字写入输出流。文档说明这个重载实际上......
通过调用该对象上的ToString方法将对象的文本表示写入文本字符串或流
您有两种选择。继续使用StreamWriter.Write
和StreamWriter
,然后将二进制数据直接写入基础流:
Flush
或只是以字节为单位执行所有操作:
byte[] ImgFile = File.ReadAllBytes(Program.Start_Directory + URL);
sw.Write("HTTP/1.0 200 OK\r\n");
//...etc
sw.Flush();
sw.BaseStream.Write(ImgFile,0,ImgFile.Length);