public void DownloadPage() { var ipHostInfo = Dns.GetHostEntry(this.Domain); var ipAddress = ipHostInfo.AddressList[0]; var remoteEp = new IPEndPoint(ipAddress, this.Port); var socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // connect to the provided target socket.BeginConnect(remoteEp, ConnectCallback, socket); _connectDone.WaitOne(); // send the GET request var request = "GET " + this.Target + " HTTP/1.1\r\n" + "Host: " + ipAddress + "\r\n" + "Content-Length: 0\r\n" + "\r\n"; Console.WriteLine("The request is: " + request); socket.BeginSend(Encoding.UTF8.GetBytes(request), 0, request.Length, SocketFlags.None, SendCallback, socket); _sendDone.WaitOne(); // receive the data from the target var buffer = new byte[2048]; socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, socket); _receiveDone.WaitOne(); string result = Encoding.UTF8.GetString(buffer, 0, buffer.Length); HttpResponseParser.parse(result); Console.WriteLine(result); }
public async void DownloadPage() { var ipHostInfo = Dns.GetHostEntry(this.Domain); var ipAddress = ipHostInfo.AddressList[0]; var remoteEp = new IPEndPoint(ipAddress, this.Port); var socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // create a wrapper for the connection information var state = new StateObject { workSocket = socket, hostname = Domain, endpoint = Target, remoteEndpoint = remoteEp, }; // wait for the connection to succeed await ConnectWrapper(state); // send the GET request var request = Utils.GetRequest(Target, Domain); Console.WriteLine("The request is: " + request); await SendWrapper(state, request); // receive the data await ReceiveWrapper(state); var response = HttpResponseParser.parse(state.sb.ToString()); Console.WriteLine("Got response with status {0} and header length {1}", response.Status, response.Headers.Count); socket.Close(); }
private void ReceiveCallback(IAsyncResult asyncResult) { try { StateObject state = (StateObject)asyncResult.AsyncState; Socket client = state.workSocket; int bytesRead = client.EndReceive(asyncResult); if (bytesRead > 0) { state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead)); client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, ReceiveCallback, state); } else { // we have received all the data var response = HttpResponseParser.parse(state.sb.ToString()); Console.WriteLine("Got response with status {0} and header length {1}", response.Status, response.Headers.Count); receiveDone.Set(); client.Close(); } } catch (Exception e) { Console.WriteLine(e.ToString()); } }