zoukankan      html  css  js  c++  java
  • 异步获取远程文件

    using System;
    using System.IO;
    using System.Net;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;

    namespace Test
    {
    public class RequestState
    {
    const int BUFFER_SIZE = 1024;
    public StringBuilder requestData;
    public byte[] BufferRead;
    public HttpWebRequest request;
    public HttpWebResponse response;
    public Stream streamResponse;

    public RequestState()
    {
    BufferRead
    = new byte[BUFFER_SIZE];
    requestData
    = new StringBuilder("");
    request
    = null;
    streamResponse
    = null;
    }
    }

    public class HttpWebRequest_BeginGetResponse
    {
    public static ManualResetEvent allDone = new ManualResetEvent(false);
    const int BUFFER_SIZE = 1024;
    const int DefaultTimeout = 2 * 60 * 1000; // 2 minutes timeout

    // Abort the request if the timer fires.
    private static void TimeoutCallback(object state, bool timedOut)
    {
    if (timedOut)
    {
    HttpWebRequest request
    = state as HttpWebRequest;
    if (request != null)
    {
    request.Abort();
    }
    }
    }

    public void Read()
    {
    try
    {
    // Create a HttpWebrequest object to the desired URL.
    HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://passport.cnblogs.com/login.aspx");

    RequestState myRequestState
    = new RequestState();
    myRequestState.request
    = myHttpWebRequest;

    IAsyncResult result
    = (IAsyncResult)myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback), myRequestState);
    ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,
    new WaitOrTimerCallback(TimeoutCallback), myHttpWebRequest, DefaultTimeout, true);
    allDone.WaitOne();
    myRequestState.response.Close();
    }
    catch (WebException e)
    {
    Console.WriteLine(
    "\nMain Exception raised!");
    Console.WriteLine(
    "\nMessage:{0}", e.Message);
    Console.WriteLine(
    "\nStatus:{0}", e.Status);
    Console.WriteLine(
    "Press any key to continue..........");
    }
    catch (Exception e)
    {
    Console.WriteLine(
    "\nMain Exception raised!");
    Console.WriteLine(
    "Source :{0} ", e.Source);
    Console.WriteLine(
    "Message :{0} ", e.Message);
    Console.WriteLine(
    "Press any key to continue..........");
    Console.Read();
    }
    }
    private static void RespCallback(IAsyncResult asynchronousResult)
    {
    try
    {
    // State of request is asynchronous.
    RequestState myRequestState = (RequestState)asynchronousResult.AsyncState;
    HttpWebRequest myHttpWebRequest
    = myRequestState.request;
    myRequestState.response
    = (HttpWebResponse)myHttpWebRequest.EndGetResponse(asynchronousResult);

    // Read the response into a Stream object.
    Stream responseStream = myRequestState.response.GetResponseStream();
    myRequestState.streamResponse
    = responseStream;

    // Begin the Reading of the contents of the HTML page and print it to the console.
    IAsyncResult asynchronousInputRead = responseStream.BeginRead(myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
    return;
    }
    catch (WebException e)
    {
    Console.WriteLine(
    "\nRespCallback Exception raised!");
    Console.WriteLine(
    "\nMessage:{0}", e.Message);
    Console.WriteLine(
    "\nStatus:{0}", e.Status);
    }
    allDone.Set();
    }

    private static void ReadCallBack(IAsyncResult asyncResult)
    {
    try
    {
    RequestState myRequestState
    = (RequestState)asyncResult.AsyncState;
    Stream responseStream
    = myRequestState.streamResponse;
    int read = responseStream.EndRead(asyncResult);
    // Read the HTML page and then print it to the console.
    if (read > 0)
    {
    myRequestState.requestData.Append(Encoding.ASCII.GetString(myRequestState.BufferRead,
    0, read));
    IAsyncResult asynchronousResult
    = responseStream.BeginRead(myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
    return;
    }
    else
    {
    Console.WriteLine(
    "\nThe contents of the Html page are : ");
    if (myRequestState.requestData.Length > 1)
    {
    string stringContent;
    stringContent
    = myRequestState.requestData.ToString();
    Console.WriteLine(
    "\t");
    Console.WriteLine(
    "\t");
    Console.WriteLine(
    "\t");
    Console.WriteLine(
    "\t");
    Console.WriteLine(stringContent);
    Console.WriteLine(
    "\t");
    Console.WriteLine(
    "\t");
    }
    Console.WriteLine(
    "Press any key to continue..........");
    Console.ReadLine();

    responseStream.Close();
    }
    }
    catch (WebException e)
    {
    Console.WriteLine(
    "\nReadCallBack Exception raised!");
    Console.WriteLine(
    "\nMessage:{0}", e.Message);
    Console.WriteLine(
    "\nStatus:{0}", e.Status);
    }
    allDone.Set();
    }
    }
    }

  • 相关阅读:
    linux less命令用法
    Spark-RDD 模型 以及运行原理
    Spark 架构原理介绍 以及 job、task、stag 概念
    Kafka 基本概念以及框架介绍
    负载均衡- TCP/ IP 基础知识
    JAVA多线程和并发基础面试题
    Java并发使用--线程池
    Java基础--并发编程
    事务实现原则(一) 事务的改变以及JDBC事务的设计
    Spark RDD Transformation和Action
  • 原文地址:https://www.cnblogs.com/tommyli/p/1792357.html
Copyright © 2011-2022 走看看