예제 #1
0
        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()));
        }
예제 #4
0
 private async Task receiveTask(TaskResponse response)
 {
     response.socket.BeginReceive(response.byteContent, 0, 1000, SocketFlags.None, onReceive, response);
     await Task.FromResult(response.receiveEvent.Wait());
 }