rendered paste body public class MyHttpWebRequest
{
Socket socket;
BufferedStream bufferedStream;
string server, path;
int port;
byte[] buf;
public MyHttpWebRequest(string url)
{
int i;
if (url.StartsWith("http"))
{
for (i = 0; i < url.Length; i++)
if (url[i] == '/')
{
i += 2;
break;
}
url = url.Substring(i);
}
i = url.IndexOf(':');
if (i >= 0)
{
server = url.Substring(0, i);
url = url.Substring(i + 1);
i = url.IndexOf('/');
Int32.TryParse(url.Substring(0, i), out port);
}
else
{
i = url.IndexOf('/');
server = url.Substring(0, i);
port = 80;
}
path = url.Substring(i);
}
public void BeginDownloadFile(string fileName)
{
buf = new byte[65536];
bufferedStream = new BufferedStream(new FileStream(fileName, FileMode.Create, FileAccess.Write));
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.BeginConnect(server, port, ConnectCallback, null);
}
private void ConnectCallback(IAsyncResult iAsyncResult)
{
socket.EndConnect(iAsyncResult);
string query = "GET " + path + " / HTTP/1.0\r\nAccept: */*\r\n\r\n";
socket.BeginSend(System.Text.Encoding.Default.GetBytes(query), 0, query.Length, SocketFlags.None, SendCallback, null);
}
private void SendCallback(IAsyncResult iAsyncResult)
{
socket.EndSend(iAsyncResult);
socket.BeginReceive(buf, 0, 65536, SocketFlags.None, ReceiveCallback, null);
}
private void ReceiveCallback(IAsyncResult iAsyncResult)
{
int len = socket.EndSend(iAsyncResult);
if (len > 0)
{
bufferedStream.Write(buf, 0, len);
socket.BeginReceive(buf, 0, 65536, SocketFlags.None, ReceiveCallback, null);
}
else
{
bufferedStream.Close();
socket.Close();
}
}
}