Проверьте прокси из списка - PullRequest
0 голосов
/ 08 июня 2011

Итак, у меня есть список, который у меня есть для списка прокси.У меня есть 4 кнопки, относящиеся к нему.они находят, загружают, сохраняют и проверяют

Первые 3 закончили и работают, но я не нашел ничего полезного, касающегося проверки прокси, единственный, который я нашел, занял около 6 секунд на прокси, так чтодля списка приличного размера потребовалось много времени.

Так как я могу сделать так, чтобы при нажатии этой кнопки он проверял все прокси в списке и удалял медленные и течто изо всех сил не работают.и делает это в приличном темпе (так что это, вероятно, будет многопоточным)

и так как я не могу понять это, у меня нет кода, относящегося к этому, за исключением подпрограммы для нажатия кнопки, я не чувствую тамнеобходимо разместить код

Ответы [ 2 ]

2 голосов
/ 08 июня 2011
Public Shared Function CheckProxy(ByVal Proxy As String) As Boolean
    Dim prx As Uri = Nothing
    If Uri.TryCreate(Proxy, UriKind.Absolute, prx) Then
        Return CheckProxy(prx)
    ElseIf Uri.TryCreate("http://" & Proxy, UriKind.Absolute, prx) Then
        Return CheckProxy(prx)
    Else
        Return False
    End If
End Function

Public Shared Function CheckProxy(ByVal Proxy As Uri) As Boolean
    Dim iProxy As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    iProxy.ReceiveTimeout = 500 : iProxy.SendTimeout = 500
    Try
        '' Connect using a timeout (1/2 second)
        Dim result As IAsyncResult = iProxy.BeginConnect(Proxy.Host, Proxy.Port, Nothing, Nothing)
        Dim success As Boolean = result.AsyncWaitHandle.WaitOne(500, True)
        If (Not success) Then
            iProxy.Close() : Return False
        End If
    Catch ex As Exception
        Return False
    End Try

    Dim bytData() As Byte, strData As String
    Dim iDataLen As Integer = 1024
    strData = String.Format("CONNECT {0}:{1} HTTP/1.0{2}{2}", "www.google.com", 80, vbNewLine)

    bytData = System.Text.ASCIIEncoding.ASCII.GetBytes(strData)
    If iProxy.Connected Then
        iProxy.Send(bytData, bytData.Length, SocketFlags.None)
        ReDim bytData(1024)
        Do
            Try
                iDataLen = iProxy.Receive(bytData, bytData.Length, SocketFlags.None)
            Catch ex As Exception
                iProxy.Close() : Return False
            End Try
            If iDataLen > 0 Then
                strData = System.Text.ASCIIEncoding.ASCII.GetString(bytData)
                Exit Do
            End If
        Loop
    Else
        Return False
    End If
    iProxy.Close()

    Dim strAttribs() As String
    strAttribs = strData.Split(" "c)
    If strAttribs(1).Equals("200") Then
        Return True
    Else
        Return False
    End If
End Function

Вы должны управлять своим кодом для потоков и т. Д., Как предложено @Nima для вашей проблемы проверки прокси. У меня есть 2 метода здесь. Один запрашивает строку прокси и пытается ее подключить.например,

ProxyStatus = CheckProxy("http://192.168.1.1:8080/")

ProxyStatus имеет значение True / False в зависимости от того, работает прокси или нет

2 голосов
/ 08 июня 2011

Мое предложение для вас:

1) использовать элемент управления таймером и установить для его свойства Tick соответствующее значение, например 500;

2) создать массив BackGroudWorkers, например BackGroudWorker [20];

3) когда ваше приложение запускает все BackGroudWorkers в массиве и в тиковом событии таймера проверяет, завершен ли какой-либо из этих BackGroudWorker или нет. Если он завершен, и у вас есть другой элемент в списке, запустите его с новым элементом. список пунктов проверено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...