private async void runTask(int id, string server) { IPHostEntry iPHostEntry = Dns.GetHostEntry(server); IPAddress iPAddress = iPHostEntry.AddressList[0]; IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, 80); Socket client = new Socket(iPAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); TaskResponse response = new TaskResponse(serverNo, client, server); await connectTask(response, iPEndPoint); await sendTask(response, "GET / HTTP/1.0\r\n\r\n"); await receiveTask(response); int bLength = Parser.getBody(response.stringContent).Length; int hLength = Parser.getLength(response.stringContent); Console.WriteLine("Id:" + response.id + " expected:" + hLength + " got:" + bLength); response.socket.Shutdown(SocketShutdown.Both); response.socket.Close(); }
private void onReceive(IAsyncResult result) { TaskResponse response = (TaskResponse)result.AsyncState; int read = response.socket.EndReceive(result); response.stringContent += Encoding.ASCII.GetString(response.byteContent, 0, read); if (!Parser.responseDone(response.stringContent)) { response.socket.BeginReceive(response.byteContent, 0, 1000, SocketFlags.None, onReceive, response); } else { int bLength = Parser.getBody(response.stringContent).Length; int hLength = Parser.getLength(response.stringContent); if (bLength < hLength) { response.socket.BeginReceive(response.byteContent, 0, 1000, SocketFlags.None, onReceive, response); } else { response.receiveEvent.Notify(); } } }
private Task connectTask(TaskResponse response, IPEndPoint iPEndPoint) { response.socket.BeginConnect(iPEndPoint, onConnect, response); return(Task.FromResult(response.connectEvent.Wait())); }
private async Task receiveTask(TaskResponse response) { response.socket.BeginReceive(response.byteContent, 0, 1000, SocketFlags.None, onReceive, response); await Task.FromResult(response.receiveEvent.Wait()); }