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
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
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;
}
}
.net 里面好多的同步,异步,不知道在java里面怎么实现