Help debugging a simple console app please....

J

jim

I need a multithreaded web proxy, and I found the code for a simple console
app that is supposed to be a multithreaded web proxy server at
http://www.vbdotnetheaven.com/Uploadfile/psingh/WebServer04162005083342AM/WebServer.aspx.
This seemed like a good starting point.

It seems to start OK (no errors and looks proper in the command window), but
there no page is returned to the browser.

What am I doing wrong? (All help will be sincerely appreciated.)

<code_block>

Imports System '
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Imports System.Threading
Namespace WebProxy2
Class WebProxy2
Private clientSocket As Socket
Private read() As [Byte] = New Byte(1024) {}
Private Buffer As [Byte]() = Nothing
Private ASCII As Encoding = Encoding.ASCII
Private HTTP_VERSION As String = "HTTP/1.0"
Private CRLF As String = ControlChars.Cr + ControlChars.Lf
Private RecvBytes(4096) As [Byte]
Public Sub New(ByVal socket As Socket)
Me.clientSocket = socket
End Sub 'New
Public Sub run()
Dim clientmessage As [String] = " "
Dim sURL As [String] = " "
Dim bytes As Integer = readmessage(read, clientSocket,
clientmessage)
If bytes = 0 Then
Return
End If
Dim index1 As Integer = clientmessage.IndexOf(" "c)
Dim index2 As Integer = clientmessage.IndexOf(" "c, index1 + 1)
If index1 = -1 Or index2 = -1 Then
Throw New IOException
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)
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)
Try
Dim IPHost As IPHostEntry = Dns.GetHostEntry(sURL)
Console.WriteLine("Request resolved: ", IPHost.HostName)
Dim aliases As String() = IPHost.Aliases
Dim address As IPAddress() = IPHost.AddressList
Console.WriteLine(address(0))
Dim sEndpoint As New IPEndPoint(address(0), 80)
Dim IPsocket As New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
IPsocket.Connect(sEndpoint)
If IPsocket.Connected Then
Console.WriteLine("Socket connect OK")
End If
Dim [GET] As String = clientmessage
Dim ByteGet As [Byte]() = ASCII.GetBytes([GET])
IPsocket.Send(ByteGet, ByteGet.Length, 0)
Dim rBytes As Int32 = IPsocket.Receive(RecvBytes,
RecvBytes.Length, 0)
Console.WriteLine("Recieved {0}", +rBytes)
'Buffer = RecvBytes;
Dim strRetPage As [String] = Nothing
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0,
rBytes)
While rBytes > 0
rBytes = IPsocket.Receive(RecvBytes, RecvBytes.Length,
0)
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0,
rBytes)
End While
IPsocket.Shutdown(SocketShutdown.Both)
IPsocket.Close()
sendmessage(clientSocket, strRetPage)
Catch exc2 As Exception
Console.WriteLine(exc2.ToString())
End Try
End Sub 'run
Private Function readmessage(ByVal ByteArray() As Byte, ByRef s As
Socket, ByRef clientmessage As [String]) As Integer
Dim bytes As Integer = s.Receive(ByteArray, 1024, 0)
Dim messagefromclient As String =
Encoding.ASCII.GetString(ByteArray)
clientmessage = CType(messagefromclient, [String])
Return bytes
End Function 'readmessage
Private Sub sendmessage(ByVal s As Socket, ByVal message As String)
Buffer = New [Byte](message.Length + 1) {}
Dim length As Integer = ASCII.GetBytes(message, 0,
message.Length, Buffer, 0)
s.Send(Buffer, length, 0)
End Sub 'sendmessage
''Entry point which delegates to C-style main Private Function
'Public Overloads Shared Sub Main()
' Main(System.Environment.GetCommandLineArgs())
'End Sub
Overloads Shared Sub Main(ByVal args() As String)
Const port As Integer = 8889
Dim address(3) As Byte
address(0) = 127
address(1) = 0
address(2) = 0
address(3) = 1
Dim localaddress As New System.Net.IPAddress(address)
Dim mytcplistener As New TcpListener(localaddress, port)
Console.WriteLine("Listening on port {0}", +port)
mytcplistener.Start()
While True
Dim socket As Socket = mytcplistener.AcceptSocket()
Dim webproxy As New WebProxy2(socket)
Dim thread As New Thread(AddressOf webproxy.run)
thread.Start()
End While
End Sub 'Main
End Class 'WebProxy2
End Namespace 'WebProxy2

</code_block>
 
M

Mr. Arnold

jim said:
I need a multithreaded web proxy, and I found the code for a simple console
app that is supposed to be a multithreaded web proxy server at
http://www.vbdotnetheaven.com/Uploadfile/psingh/WebServer04162005083342AM/WebServer.aspx.
This seemed like a good starting point.

It seems to start OK (no errors and looks proper in the command window),
but there no page is returned to the browser.

What am I doing wrong? (All help will be sincerely appreciated.)

When was a Console Application able to interface with a Windows or Web
browser UI?

I could be wrong, but I don't think you can do it. A proxy does something on
the behalf of something else, and in this case, a Console Application cannot
be a proxy that's going to allow the interfacing you're expecting.
 
M

Matthias Tacke

Mr. Arnold said:
When was a Console Application able to interface with a Windows or Web
browser UI?

I could be wrong, but I don't think you can do it. A proxy does
something on the behalf of something else, and in this case, a Console
Application cannot be a proxy that's going to allow the interfacing
you're expecting.
Yes, you are totally wrong.
Looks like you have no idea what a proxy is, nor did you have a look at the
provided link.
See <http://en.wikipedia.org/wiki/Proxy_server> to get you going.

@OP
How did you test?
Which browser?
Have you changed the standard proxy port 8089?
Did you address localhost with that port in your browsers proy settings?
I have no time to test it myself, but you may have to change :
address(0) = 127
address(1) = 0
address(2) = 0
address(3) = 1
to reflect your real IP
 
J

jim

The line "Dim rBytes As Int32 = IPsocket.Receive(RecvBytes,
RecvBytes.Length, 0)" seems to be the sticking point.

The code does not error out and does not seem to continue beyond this line.

jim



jim said:
I need a multithreaded web proxy, and I found the code for a simple console
app that is supposed to be a multithreaded web proxy server at
http://www.vbdotnetheaven.com/Uploadfile/psingh/WebServer04162005083342AM/WebServer.aspx.
This seemed like a good starting point.

It seems to start OK (no errors and looks proper in the command window),
but there no page is returned to the browser.

What am I doing wrong? (All help will be sincerely appreciated.)

<code_block>

Imports System '
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Imports System.Threading
Namespace WebProxy2
Class WebProxy2
Private clientSocket As Socket
Private read() As [Byte] = New Byte(1024) {}
Private Buffer As [Byte]() = Nothing
Private ASCII As Encoding = Encoding.ASCII
Private HTTP_VERSION As String = "HTTP/1.0"
Private CRLF As String = ControlChars.Cr + ControlChars.Lf
Private RecvBytes(4096) As [Byte]
Public Sub New(ByVal socket As Socket)
Me.clientSocket = socket
End Sub 'New
Public Sub run()
Dim clientmessage As [String] = " "
Dim sURL As [String] = " "
Dim bytes As Integer = readmessage(read, clientSocket,
clientmessage)
If bytes = 0 Then
Return
End If
Dim index1 As Integer = clientmessage.IndexOf(" "c)
Dim index2 As Integer = clientmessage.IndexOf(" "c, index1 + 1)
If index1 = -1 Or index2 = -1 Then
Throw New IOException
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)
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)
Try
Dim IPHost As IPHostEntry = Dns.GetHostEntry(sURL)
Console.WriteLine("Request resolved: ", IPHost.HostName)
Dim aliases As String() = IPHost.Aliases
Dim address As IPAddress() = IPHost.AddressList
Console.WriteLine(address(0))
Dim sEndpoint As New IPEndPoint(address(0), 80)
Dim IPsocket As New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
IPsocket.Connect(sEndpoint)
If IPsocket.Connected Then
Console.WriteLine("Socket connect OK")
End If
Dim [GET] As String = clientmessage
Dim ByteGet As [Byte]() = ASCII.GetBytes([GET])
IPsocket.Send(ByteGet, ByteGet.Length, 0)
Dim rBytes As Int32 = IPsocket.Receive(RecvBytes,
RecvBytes.Length, 0)
Console.WriteLine("Recieved {0}", +rBytes)
'Buffer = RecvBytes;
Dim strRetPage As [String] = Nothing
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0,
rBytes)
While rBytes > 0
rBytes = IPsocket.Receive(RecvBytes, RecvBytes.Length,
0)
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0,
rBytes)
End While
IPsocket.Shutdown(SocketShutdown.Both)
IPsocket.Close()
sendmessage(clientSocket, strRetPage)
Catch exc2 As Exception
Console.WriteLine(exc2.ToString())
End Try
End Sub 'run
Private Function readmessage(ByVal ByteArray() As Byte, ByRef s As
Socket, ByRef clientmessage As [String]) As Integer
Dim bytes As Integer = s.Receive(ByteArray, 1024, 0)
Dim messagefromclient As String =
Encoding.ASCII.GetString(ByteArray)
clientmessage = CType(messagefromclient, [String])
Return bytes
End Function 'readmessage
Private Sub sendmessage(ByVal s As Socket, ByVal message As String)
Buffer = New [Byte](message.Length + 1) {}
Dim length As Integer = ASCII.GetBytes(message, 0,
message.Length, Buffer, 0)
s.Send(Buffer, length, 0)
End Sub 'sendmessage
''Entry point which delegates to C-style main Private Function
'Public Overloads Shared Sub Main()
' Main(System.Environment.GetCommandLineArgs())
'End Sub
Overloads Shared Sub Main(ByVal args() As String)
Const port As Integer = 8889
Dim address(3) As Byte
address(0) = 127
address(1) = 0
address(2) = 0
address(3) = 1
Dim localaddress As New System.Net.IPAddress(address)
Dim mytcplistener As New TcpListener(localaddress, port)
Console.WriteLine("Listening on port {0}", +port)
mytcplistener.Start()
While True
Dim socket As Socket = mytcplistener.AcceptSocket()
Dim webproxy As New WebProxy2(socket)
Dim thread As New Thread(AddressOf webproxy.run)
thread.Start()
End While
End Sub 'Main
End Class 'WebProxy2
End Namespace 'WebProxy2

</code_block>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top