2016-06-05 1 views
0

Я нашел пример прокси-сервера в Интернете во время поиска, и я был очень рад, что он был сломан, но мне удалось исправить действительно простые проблемы, а затем я попал в самую большую проблему, потому что я не делал эту программу, я действительно не знаю, как все это работает, поэтому, когда я получил эту ошибку, я был в значительной степени озадачен.Я нашел пример прокси в Интернете, но он бросает исключение, что может быть неправильным?

Proxy Server Code

Alright проблема от линии, которая говорит

sURL = part1.Substring(index1 + 4, part1.Length - index5 - 8) 

Это дает мне эту ошибку, когда кто-то связывает

System.ArgumentOutOfRangeException {"Length cannot be less than zero Parameter name: length"} 

Кто-нибудь знает, что может быть проблема, и если бы вы могли объяснить причину этого?

Спасибо.

здесь clientmessage

"CONNECT googleads.g.doubleclick.net:443 HTTP/1.1" & vbCrLf & "Host: googleads.g.doubleclick.net:443" & vbCrLf & "Proxy-Connection: keep-alive" & vbCrLf & "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36" & vbCrLf & "" & vbCrLf & "" 
+0

Просьба обновить свой вопрос со значением 'clientmessage', когда вы получите' Exception'. –

+0

Готово. Я ценю, что вы помогаете мне. –

+0

Сообщение об исключении сообщает вам, что не так; В вызове 'Substring' параметр length меньше 0, что означает, что вычисление:' part1.Length - index5 - 8' меньше 0. (Фактически это -8, потому что в части 1 нет '/') – theB

ответ

0

Так что - этот бит:

Dim index1 As Integer = clientmessage.IndexOf(" "c) 
Dim index2 As Integer = clientmessage.IndexOf(" "c, index1 + 1) 
If index1 = -1 Or index2 = -1 Then 
    Stop 
End If 
Console.WriteLine("Connecting to Site: {0}", clientmessage.Substring(index1 + 1, index2 - index1)) 
Console.WriteLine("Connection from {0}", clientSocket.RemoteEndPoint) 
Dim part1 As String = clientmessage.Substring(index1 + 1, index2 - index1) 

Просто изолирует googleads.g.doubleclick.net:443 часть строки.

Следующий раздел проблематичен по двум причинам. Во-первых, он использует «магическое число», то есть 8, который, возможно, работал в исходном коде, но теперь немного непрозрачен. Во-вторых, строка для index3 пытается найти /, которая может или не может существовать в строке.

Возможно, оригинальный программист всегда имеет дело с какой-то сложной URL, но это не проблема для вас, и поэтому код дает исключение, поскольку сочетание индексов, использующееся в попытку присвоить sURL в основном недействительное:

Dim index3 As Integer = part1.IndexOf("/"c, index1 + 8) 
Dim index4 As Integer = part1.IndexOf(" "c, index1 + 8) 
Dim index5 As Integer = index4 - index3 
sURL = part1.Substring(index1 + 4, part1.Length - index5 - 8) 

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

sURL = part1.Substring(0, part1.LastIndexOf(":")) 

Это больше догадок, чем ответ, но я мог бы не писать все это в комментарии!

+0

Хотя это было слишком много, чтобы вписаться в комментарий, вы все еще помогли мне в этом вопросе, спасибо. –