Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Configuration
Imports System.WebPublic MustInherit Class HttpUtility
    Protected m_ServiceURI As String    Public Property ServiceURI() As String
        Get
            Return m_ServiceURI
        End Get
        Set(ByVal Value As String)
            m_ServiceURI = Value
        End Set
    End Property    Public Sub New()
        m_ServiceURI = ""
    End Sub
End ClassPublic Class SyncHttpUtility
    Inherits HttpUtility    Public Function HttpQuery(ByVal cmd As String, ByRef ret As String) As Boolean
        Dim bRet As Boolean = False
        Dim sRet As String = ""        Try
            Dim oUri As Uri = New Uri(Me.m_ServiceURI)
            Dim oReq As HttpWebRequest
            Dim oReqStream, oRespStream As Stream
            Dim SendBytes() As Byte
            Dim oResp As HttpWebResponse
            Dim sr As StreamReader
            Dim character As Integer
            Dim temp(1) As Byte            oReq = CType(WebRequest.Create(oUri), HttpWebRequest)
            oReq.Method = "POST"            'SendBytes = Encoding.GetEncoding(936).GetBytes(cmd)
            cmd = System.Web.HttpUtility.UrlEncode(cmd)
            SendBytes = Encoding.UTF8.GetBytes(cmd)            oReq.ContentLength = SendBytes.Length            oReqStream = oReq.GetRequestStream()
            oReqStream.Write(SendBytes, 0, SendBytes.Length)
            oReq.Timeout = 1000 * 30
            oReqStream.Close()            oResp = oReq.GetResponse()
            oRespStream = oResp.GetResponseStream()            'sr = New StreamReader(oRespStream, Encoding.GetEncoding(936))
            sr = New StreamReader(oRespStream, Encoding.UTF8)            sRet = sr.ReadToEnd
            ret = sRet
            bRet = True
        Catch ex As Exception
            bRet = False
            ret = ex.Message
        End Try        Return bRet
    End FunctionEnd ClassPublic Class ASyncHttpUtility
    Inherits HttpUtility    Const BUFFER_SIZE As Integer = 1024    Private ResultQueue As Queue    Public IsBack As Boolean    'New
    Public Sub New()
        ResultQueue = New Queue
        IsBack = True
    End Sub    'Callback State Class
    Private Class RequestState
        Public ID As String
        Public Request As HttpWebRequest
        Public ResponseStream As Stream
        Public BufferRead(BUFFER_SIZE) As Byte
        Public RequestData As StringBuilder = New StringBuilder("")
        'Public StreamDecode As Decoder = Encoding.GetEncoding(936).GetDecoder()
        Public StreamDecode As Decoder = Encoding.UTF8.GetDecoder()        Public Sub New()
            Request = Nothing
            ResponseStream = Nothing
            ID = Now.ToLongTimeString
        End Sub
    End Class    Private Sub Print(ByVal text As String)
        Debug.WriteLine(text)
    End Sub    Private Sub AddResult(ByVal content As String)
        ResultQueue.Enqueue(content)
    End Sub    Public Function GetResult() As String
        Dim sRet As String = ""
        Try
            If ResultQueue.Count <> 0 Then
                sRet = ResultQueue.Dequeue
            End If
        Catch ex As Exception
            'How?
            sRet = ""
        End Try        Return sRet
    End Function    'Send Request
    Public Sub AnsyncSendHttpWebRequest(ByVal cid As String)
        Try
            IsBack = False            Dim oUri As Uri = New Uri(Me.m_ServiceURI & "?CID=" & cid)
            Dim oReq As HttpWebRequest
            Dim oReqState As New RequestState            oReq = CType(WebRequest.Create(oUri), HttpWebRequest)
            oReqState.Request = oReq            oReq.BeginGetResponse(New AsyncCallback(AddressOf HttpWebResponseCallback), oReqState)
            Print("Info : Send Request : " & oReqState.ID & " : " & Now.ToLongTimeString)
        Catch ex As Exception
            IsBack = True            AddResult("Ex : Send Request : " & ex.ToString)
            Print("Ex : Send Request : " & ex.ToString)
        End Try
    End Sub    'Process Request Callback
    Private Sub HttpWebResponseCallback(ByVal ar As System.IAsyncResult)
        Try
            IsBack = False            Dim oReqState As RequestState = CType(ar.AsyncState, RequestState)            Dim oReq As HttpWebRequest = oReqState.Request
            Dim oResp As HttpWebResponse = CType(oReq.EndGetResponse(ar), HttpWebResponse)            Dim oRespStream As Stream = oResp.GetResponseStream()
            oReqState.ResponseStream = oRespStream            Dim reader As StreamReader = New StreamReader(oRespStream)
            'Send Read
            Dim arRead As IAsyncResult = _
               oRespStream.BeginRead(oReqState.BufferRead, 0, BUFFER_SIZE, _
               New AsyncCallback(AddressOf HttpWebReadCallBack), oReqState)            Print("Info : Response Callback : " & oReqState.ID & " : " & Now.ToLongTimeString)        Catch ex As Exception
            IsBack = True            AddResult("Ex : Request Callback : " & Now.ToString & " : " & ex.ToString)
            Print("Ex : Request Callback : " & Now.ToString & " : " & ex.ToString)
        End Try
    End Sub    'Process Read Callback
    Private Sub HttpWebReadCallBack(ByVal asyncResult As IAsyncResult)
        Try
            IsBack = False            Dim oReqState As RequestState = CType(asyncResult.AsyncState, RequestState)
            Dim oRespStream As Stream = oReqState.ResponseStream            Print("Info : Read Callback Start: " & oReqState.ID & " : " & Now.ToLongTimeString)            'Still has data in stream
            Dim read As Integer = oRespStream.EndRead(asyncResult)
            If read > 0 Then
                'Keep
                Dim charBuffer(BUFFER_SIZE) As Char
                Dim len As Integer = _
                  oReqState.StreamDecode.GetChars(oReqState.BufferRead, 0, read, charBuffer, 0)
                Dim str As String = New String(charBuffer, 0, len)                'oReqState.RequestData.Append(Encoding.GetEncoding(936).GetString(oReqState.BufferRead, 0, read))
                oReqState.RequestData.Append(Encoding.UTF8.GetString(oReqState.BufferRead, 0, read))
                ' Continue reading until returns –1.0.                Dim ar As IAsyncResult = _
                   oRespStream.BeginRead(oReqState.BufferRead, 0, BUFFER_SIZE, _
                   New AsyncCallback(AddressOf HttpWebReadCallBack), oReqState)
            Else
                Dim strContent As String = ""                'End reading or Has no data
                If oReqState.RequestData.Length > 1 Then
                    strContent = oReqState.RequestData.ToString()
                    'print("Info : Read Callback : " & strContent)
                    Print("Info : Read Callback End: " & oReqState.ID & " : " & Now.ToLongTimeString & " : " & strContent)
                Else
                    Print("Info : Read Callback : " & "no data found")
                End If                ' Close the response stream.
                oRespStream.Close()
                AddResult(strContent)
            End If        Catch ex As Exception
            AddResult("Ex : Read Callback : " & ex.ToString)
            Print("Ex : Read Callback : " & ex.ToString)
        End Try        IsBack = True    End SubEnd Class

解决方案 »

  1.   

    using System.Net; 
    using System.IO; 
    using System.Text; 
    using System.Configuration; 
    using System.Web; 
    public abstract class HttpUtility 

     protected string m_ServiceURI;  public string ServiceURI { 
       get { 
         return m_ServiceURI; 
       } 
       set { 
         m_ServiceURI = Value; 
       } 
     }  public HttpUtility() 
     { 
       m_ServiceURI = ""; 
     } 

    public class SyncHttpUtility : HttpUtility 
    {  public bool HttpQuery(string cmd, ref string ret) 
     { 
       bool bRet = false; 
       string sRet = ""; 
       try { 
         Uri oUri = new Uri(this.m_ServiceURI); 
         HttpWebRequest oReq; 
         Stream oReqStream; 
         Stream oRespStream; 
         byte[] SendBytes; 
         HttpWebResponse oResp; 
         StreamReader sr; 
         int character; 
         byte[] temp = new byte[1]; 
         oReq = ((HttpWebRequest)(WebRequest.Create(oUri))); 
         oReq.Method = "POST"; 
         cmd = System.Web.HttpUtility.UrlEncode(cmd); 
         SendBytes = Encoding.UTF8.GetBytes(cmd); 
         oReq.ContentLength = SendBytes.Length; 
         oReqStream = oReq.GetRequestStream(); 
         oReqStream.Write(SendBytes, 0, SendBytes.Length); 
         oReq.Timeout = 1000 * 30; 
         oReqStream.Close(); 
         oResp = oReq.GetResponse(); 
         oRespStream = oResp.GetResponseStream(); 
         sr = new StreamReader(oRespStream, Encoding.UTF8); 
         sRet = sr.ReadToEnd; 
         ret = sRet; 
         bRet = true; 
       } catch (Exception ex) { 
         bRet = false; 
         ret = ex.Message; 
       } 
       return bRet; 
     } 

    public class ASyncHttpUtility : HttpUtility 

     const int BUFFER_SIZE = 1024; 
     private Queue ResultQueue; 
     public bool IsBack;  public ASyncHttpUtility() 
     { 
       ResultQueue = new Queue(); 
       IsBack = true; 
     } 
     private class RequestState 
     { 
       public string ID; 
       public HttpWebRequest Request; 
       public Stream ResponseStream; 
       public byte[] BufferRead = new byte[BUFFER_SIZE]; 
       public StringBuilder RequestData = new StringBuilder(""); 
       public Decoder StreamDecode = Encoding.UTF8.GetDecoder();    public RequestState() 
       { 
         Request = null; 
         ResponseStream = null; 
         ID = Now.ToLongTimeString; 
       } 
     }  private void Print(string text) 
     { 
       Debug.WriteLine(text); 
     }  private void AddResult(string content) 
     { 
       ResultQueue.Enqueue(content); 
     }  public string GetResult() 
     { 
       string sRet = ""; 
       try { 
         if (ResultQueue.Count != 0) { 
           sRet = ResultQueue.Dequeue; 
         } 
       } catch (Exception ex) { 
         sRet = ""; 
       } 
       return sRet; 
     }  public void AnsyncSendHttpWebRequest(string cid) 
     { 
       try { 
         IsBack = false; 
         Uri oUri = new Uri(this.m_ServiceURI + "?CID=" + cid); 
         HttpWebRequest oReq; 
         RequestState oReqState = new RequestState(); 
         oReq = ((HttpWebRequest)(WebRequest.Create(oUri))); 
         oReqState.Request = oReq; 
         oReq.BeginGetResponse(new AsyncCallback(/* might be wrong, please check */ new EventHandler(HttpWebResponseCallback)), oReqState); 
         Print("Info : Send Request : " + oReqState.ID + " : " + Now.ToLongTimeString); 
       } catch (Exception ex) { 
         IsBack = true; 
         AddResult("Ex : Send Request : " + ex.ToString); 
         Print("Ex : Send Request : " + ex.ToString); 
       } 
     }  private void HttpWebResponseCallback(System.IAsyncResult ar) 
     { 
       try { 
         IsBack = false; 
         RequestState oReqState = ((RequestState)(ar.AsyncState)); 
         HttpWebRequest oReq = oReqState.Request; 
         HttpWebResponse oResp = ((HttpWebResponse)(oReq.EndGetResponse(ar))); 
         Stream oRespStream = oResp.GetResponseStream(); 
         oReqState.ResponseStream = oRespStream; 
         StreamReader reader = new StreamReader(oRespStream); 
         IAsyncResult arRead = oRespStream.BeginRead(oReqState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(/* might be wrong, please check */ new EventHandler(HttpWebReadCallBack)), oReqState); 
         Print("Info : Response Callback : " + oReqState.ID + " : " + Now.ToLongTimeString); 
       } catch (Exception ex) { 
         IsBack = true; 
         AddResult("Ex : Request Callback : " + Now.ToString + " : " + ex.ToString); 
         Print("Ex : Request Callback : " + Now.ToString + " : " + ex.ToString); 
       } 
     }  private void HttpWebReadCallBack(IAsyncResult asyncResult) 
     { 
       try { 
         IsBack = false; 
         RequestState oReqState = ((RequestState)(asyncResult.AsyncState)); 
         Stream oRespStream = oReqState.ResponseStream; 
         Print("Info : Read Callback Start: " + oReqState.ID + " : " + Now.ToLongTimeString); 
         int read = oRespStream.EndRead(asyncResult); 
         if (read > 0) { 
           char[] charBuffer = new char[BUFFER_SIZE]; 
           int len = oReqState.StreamDecode.GetChars(oReqState.BufferRead, 0, read, charBuffer, 0); 
           string str = new string(charBuffer, 0, len); 
           oReqState.RequestData.Append(Encoding.UTF8.GetString(oReqState.BufferRead, 0, read)); 
           IAsyncResult ar = oRespStream.BeginRead(oReqState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(/* might be wrong, please check */ new EventHandler(HttpWebReadCallBack)), oReqState); 
         } else { 
           string strContent = ""; 
           if (oReqState.RequestData.Length > 1) { 
             strContent = oReqState.RequestData.ToString(); 
             Print("Info : Read Callback End: " + oReqState.ID + " : " + Now.ToLongTimeString + " : " + strContent); 
           } else { 
             Print("Info : Read Callback : " + "no data found"); 
           } 
           oRespStream.Close(); 
           AddResult(strContent); 
         } 
       } catch (Exception ex) { 
         AddResult("Ex : Read Callback : " + ex.ToString); 
         Print("Ex : Read Callback : " + ex.ToString); 
       } 
       IsBack = true; 
     } 
    }
      

  2.   

    上面是我转成的C#,
    .net 里面好多的同步,异步,不知道在java里面怎么实现