我在网上找到了一个代理示例,但它抛出了一个异常,这可能是错误的?

I found a proxy example online but it's throwing an exception what could be wrong?

我在搜索时在网上找到了一个代理服务器示例,我真的很高兴它坏了,但我设法解决了非常简单的问题,然后我遇到了最大的问题,因为我没有制作这个程序,我不知道我真的知道这一切是如何工作的,所以当我收到这个错误时,我感到非常困惑。

Proxy Server Code

好的,问题出在

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

有人连接时出现此错误

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

有谁知道可能是什么问题,如果是的话,您能解释一下这背后的原因吗?

谢谢。

这里是客户留言

"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 & ""

所以 - 这个位:

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 部分。

下一节有问题有两个原因。首先,它使用 'magic number' 即 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(":"))

猜测多于答案,但我无法在评论中全部写下来!