大家好。
我想知道如何使用zip
类将文件下载并保存到我的硬盘驱动器,特别是来自HTTP服务器的System.Net.Socket.Sockets
文件。
我知道有更简单的方法来下载文件与.Net,但我想知道怎么做 with Sockets ,如果可能的话,当然我很确定它是。
我尝试了一些东西,一旦我没有任何插槽背景经验就没有用。
感谢您满意我的好奇心。 任何问题只是问。谢谢。
注意:
答案 0 :(得分:3)
您可以直接使用.NET套接字执行此操作,但需要解析和理解HTTP请求。
执行此操作的标准方法是使用更高级别的System.Net类。例如,这可以通过WebClient.DownloadFile在两行代码中完成 - 为什么让自己的生活变得更加困难?
如果你真的必须从原始套接字执行此操作,那么只需要做很多工作。在它的核心,你可以通过TCP连接连接到端口80(假设http),将正确的字符串写入套接字,并开始接收数据。
话虽如此,让一切正确,处理所有需要的问题远远超出标准StackOverflow答案的范围。如果您想沿着这条路前行,请查看HTTP Protocol specifications - 您需要实施此规范的正确方面。
答案 1 :(得分:1)
为此,您只需使用.net中的“HttpWebRequest”和“HttpWebResponse”类。
下面是我编写的示例控制台应用程序,用于演示这是多么容易。
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
namespace Test
{
class Program
{
static void Main(string[] args)
{
string url = "www.somewhere.com/files/feed/list.zip";
string fileName = @"C:\list.zip";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 5000;
try
{
using (WebResponse response = (HttpWebResponse)request.GetResponse())
{
using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
byte[] bytes = ReadFully(response.GetResponseStream());
stream.Write(bytes, 0, bytes.Length);
}
}
}
catch (WebException)
{
Console.WriteLine("Error Occured");
}
}
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
}
}
享受!