How to debug this?

B

Brett

For some reason when I step into the code below, it jumps out on the second
iteration at the line I have marked below. Nothing else happens - no
errors.

Dim tcpClient As New System.Net.Sockets.TcpClient
tcpClient.Connect("127.0.0.1", 9005)

While True
Dim networkStream As NetworkStream = tcpClient.GetStream()

'If networkStream.CanWrite And networkStream.CanRead Then

' Do a simple write.
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is anybody
there")
networkStream.Write(sendBytes, 0, sendBytes.Length)
' Read the NetworkStream into a byte buffer.
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
' Output the data received from the host to the console.
Dim returndata As String = Encoding.ASCII.GetString(bytes)



Step into jumps out at above line. The rest of the code follows:

Console.WriteLine(("Host returned: " + returndata))

' pause so user can view the console output
Console.ReadLine()
End While

tcpClient.Close()

There is a server version of the app that is sending data. Any suggestions
on how I can trace this down?

Thanks,
Brett
 
M

MeltingPoint

For some reason when I step into the code below, it jumps out on the
second iteration at the line I have marked below. Nothing else
happens - no errors.

Dim tcpClient As New System.Net.Sockets.TcpClient
tcpClient.Connect("127.0.0.1", 9005)

While True
Dim networkStream As NetworkStream = tcpClient.GetStream()

'If networkStream.CanWrite And networkStream.CanRead Then

' Do a simple write.
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is
anybody
there")
networkStream.Write(sendBytes, 0, sendBytes.Length)
' Read the NetworkStream into a byte buffer.
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0,
CInt(tcpClient.ReceiveBufferSize)) ' Output the data
received from the host to the console. Dim returndata As
String = Encoding.ASCII.GetString(bytes)



Step into jumps out at above line. The rest of the code follows:

Console.WriteLine(("Host returned: " + returndata))

' pause so user can view the console output
Console.ReadLine()
End While

tcpClient.Close()

There is a server version of the app that is sending data. Any
suggestions on how I can trace this down?

Thanks,
Brett

Not sure what you mean, 'jumps out'. Does that mean it throws an
exception? You can't 'step into' GetString() but I don't think thats
what you mean.

A quick solution would be to use DataAvailable:

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

OR the dangerous way...

Do
Loop Until networkStream.DataAvailable()

too see if anything ever comes. (maybe put a counter in there and exit
after a couple hundred loops :)

but i think your trying to read to soon, if you wait on DataAvailable,
all should work code wise.

MP
 
B

Brett

MeltingPoint said:
For some reason when I step into the code below, it jumps out on the
second iteration at the line I have marked below. Nothing else
happens - no errors.

Dim tcpClient As New System.Net.Sockets.TcpClient
tcpClient.Connect("127.0.0.1", 9005)

While True
Dim networkStream As NetworkStream = tcpClient.GetStream()

'If networkStream.CanWrite And networkStream.CanRead Then

' Do a simple write.
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is
anybody
there")
networkStream.Write(sendBytes, 0, sendBytes.Length)
' Read the NetworkStream into a byte buffer.
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0,
CInt(tcpClient.ReceiveBufferSize)) ' Output the data
received from the host to the console. Dim returndata As
String = Encoding.ASCII.GetString(bytes)



Step into jumps out at above line. The rest of the code follows:

Console.WriteLine(("Host returned: " + returndata))

' pause so user can view the console output
Console.ReadLine()
End While

tcpClient.Close()

There is a server version of the app that is sending data. Any
suggestions on how I can trace this down?

Thanks,
Brett

Not sure what you mean, 'jumps out'. Does that mean it throws an
exception? You can't 'step into' GetString() but I don't think thats
what you mean.

A quick solution would be to use DataAvailable:

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

OR the dangerous way...

Do
Loop Until networkStream.DataAvailable()

too see if anything ever comes. (maybe put a counter in there and exit
after a couple hundred loops :)

but i think your trying to read to soon, if you wait on DataAvailable,
all should work code wise.

MP

Very nice. The

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

code is working fine. I have a general question about the byte array.
Sending/receiving data via the tcp/ip streams or file streams always uses
the byte array. Why can't a regular string be used? What is so special
about the byte array?

Thanks,
Brett
 
M

MeltingPoint

MeltingPoint said:
For some reason when I step into the code below, it jumps out on the
second iteration at the line I have marked below. Nothing else
happens - no errors.

Dim tcpClient As New System.Net.Sockets.TcpClient
tcpClient.Connect("127.0.0.1", 9005)

While True
Dim networkStream As NetworkStream =
tcpClient.GetStream()

'If networkStream.CanWrite And networkStream.CanRead
Then

' Do a simple write.
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is
anybody
there")
networkStream.Write(sendBytes, 0, sendBytes.Length)
' Read the NetworkStream into a byte buffer.
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0,
CInt(tcpClient.ReceiveBufferSize)) ' Output the data
received from the host to the console. Dim returndata As
String = Encoding.ASCII.GetString(bytes)



Step into jumps out at above line. The rest of the code follows:

Console.WriteLine(("Host returned: " + returndata))

' pause so user can view the console output
Console.ReadLine()
End While

tcpClient.Close()

There is a server version of the app that is sending data. Any
suggestions on how I can trace this down?

Thanks,
Brett

Not sure what you mean, 'jumps out'. Does that mean it throws an
exception? You can't 'step into' GetString() but I don't think thats
what you mean.

A quick solution would be to use DataAvailable:

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

OR the dangerous way...

Do
Loop Until networkStream.DataAvailable()

too see if anything ever comes. (maybe put a counter in there and
exit after a couple hundred loops :)

but i think your trying to read to soon, if you wait on
DataAvailable, all should work code wise.

MP

Very nice. The

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

code is working fine. I have a general question about the byte
array. Sending/receiving data via the tcp/ip streams or file streams
always uses the byte array. Why can't a regular string be used? What
is so special about the byte array?

Thanks,
Brett

I would say it mostly has to do with unicode. One byte characters
just don't do it on the global scale. By making you use
Encoding.ASCII/UTF8/UTF7/Unicode.GetString/GetBytes Microsoft is reminding
you of which market your targeting/omitting.

A little blurp:
http://msdn.microsoft.com/library/d...ef/html/frlrfsystemtextencodingclasstopic.asp

MP
 
B

Brett

MeltingPoint said:
MeltingPoint said:
For some reason when I step into the code below, it jumps out on the
second iteration at the line I have marked below. Nothing else
happens - no errors.

Dim tcpClient As New System.Net.Sockets.TcpClient
tcpClient.Connect("127.0.0.1", 9005)

While True
Dim networkStream As NetworkStream =
tcpClient.GetStream()

'If networkStream.CanWrite And networkStream.CanRead
Then

' Do a simple write.
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is
anybody
there")
networkStream.Write(sendBytes, 0, sendBytes.Length)
' Read the NetworkStream into a byte buffer.
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0,
CInt(tcpClient.ReceiveBufferSize)) ' Output the data
received from the host to the console. Dim returndata As
String = Encoding.ASCII.GetString(bytes)



Step into jumps out at above line. The rest of the code follows:

Console.WriteLine(("Host returned: " + returndata))

' pause so user can view the console output
Console.ReadLine()
End While

tcpClient.Close()

There is a server version of the app that is sending data. Any
suggestions on how I can trace this down?

Thanks,
Brett




Not sure what you mean, 'jumps out'. Does that mean it throws an
exception? You can't 'step into' GetString() but I don't think thats
what you mean.

A quick solution would be to use DataAvailable:

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

OR the dangerous way...

Do
Loop Until networkStream.DataAvailable()

too see if anything ever comes. (maybe put a counter in there and
exit after a couple hundred loops :)

but i think your trying to read to soon, if you wait on
DataAvailable, all should work code wise.

MP

Very nice. The

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

code is working fine. I have a general question about the byte
array. Sending/receiving data via the tcp/ip streams or file streams
always uses the byte array. Why can't a regular string be used? What
is so special about the byte array?

Thanks,
Brett

I would say it mostly has to do with unicode. One byte characters
just don't do it on the global scale. By making you use
Encoding.ASCII/UTF8/UTF7/Unicode.GetString/GetBytes Microsoft is reminding
you of which market your targeting/omitting.

You're saying for global compatibility. Why would that have anything to do
with MS? Because they are the ones using 7 bit characters that are stored
in the byte array and used mainly on Windows platforms?
 
B

Brett

MeltingPoint said:
MeltingPoint said:
For some reason when I step into the code below, it jumps out on the
second iteration at the line I have marked below. Nothing else
happens - no errors.

Dim tcpClient As New System.Net.Sockets.TcpClient
tcpClient.Connect("127.0.0.1", 9005)

While True
Dim networkStream As NetworkStream =
tcpClient.GetStream()

'If networkStream.CanWrite And networkStream.CanRead
Then

' Do a simple write.
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is
anybody
there")
networkStream.Write(sendBytes, 0, sendBytes.Length)
' Read the NetworkStream into a byte buffer.
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0,
CInt(tcpClient.ReceiveBufferSize)) ' Output the data
received from the host to the console. Dim returndata As
String = Encoding.ASCII.GetString(bytes)



Step into jumps out at above line. The rest of the code follows:

Console.WriteLine(("Host returned: " + returndata))

' pause so user can view the console output
Console.ReadLine()
End While

tcpClient.Close()

There is a server version of the app that is sending data. Any
suggestions on how I can trace this down?

Thanks,
Brett




Not sure what you mean, 'jumps out'. Does that mean it throws an
exception? You can't 'step into' GetString() but I don't think thats
what you mean.

A quick solution would be to use DataAvailable:

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

OR the dangerous way...

Do
Loop Until networkStream.DataAvailable()

too see if anything ever comes. (maybe put a counter in there and
exit after a couple hundred loops :)

but i think your trying to read to soon, if you wait on
DataAvailable, all should work code wise.

MP

Very nice. The

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

code is working fine. I have a general question about the byte
array. Sending/receiving data via the tcp/ip streams or file streams
always uses the byte array. Why can't a regular string be used? What
is so special about the byte array?

Thanks,
Brett

I would say it mostly has to do with unicode. One byte characters
just don't do it on the global scale. By making you use
Encoding.ASCII/UTF8/UTF7/Unicode.GetString/GetBytes Microsoft is reminding
you of which market your targeting/omitting.

A little blurp:
http://msdn.microsoft.com/library/d...ef/html/frlrfsystemtextencodingclasstopic.asp

MP

Back to the application, what does it mean if I get this in my output window
everytime the app loads:

'DefaultDomain': Loaded
'c:\windows\microsoft.net\framework\v1.1.4322\mscorlib.dll', No symbols
loaded.
'client': Loaded 'C:\Inetpub\VB.NET\client\bin\client.exe', Symbols loaded.
'client.exe': Loaded
'c:\windows\assembly\gac\system.windows.forms\1.0.5000.0__b77a5c561934e089\system.windows.forms.dll',
No symbols loaded.
'client.exe': Loaded
'c:\windows\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll', No
symbols loaded.
'client.exe': Loaded
'c:\windows\assembly\gac\system.drawing\1.0.5000.0__b03f5f7f11d50a3a\system.drawing.dll',
No symbols loaded.
'client.exe': Loaded
'c:\windows\assembly\gac\system.xml\1.0.5000.0__b77a5c561934e089\system.xml.dll',
No symbols loaded.
'client.exe': Loaded
'c:\windows\assembly\gac\microsoft.visualbasic\7.0.5000.0__b03f5f7f11d50a3a\microsoft.visualbasic.dll',
No symbols loaded.

The app seems to run fine despite the "No symbols loaded" lines.

Thanks,
Brett
 
S

Stephany Young

Yes - global compatibility.

ASCII - American Standard Code for Information Interchange - is a globally
recognised for exchanging data where you don't need any more than 7 bits per
character. It has origins dating back to the first teleprinters.

At some point in time a 8 bit standard was introduced which extendend the
number of characters from 128 to 256. This is known as ANSI because it was
codified by the American National Satandards institute..

As the need for even more characters became apparent, various schemes were
introduced but the one that won the battle was UCS (Universal Character Set)
which is now codified by ISO as one of it's numbered standards (I don't know
which one off the top of my head.)

One thing that should be noted is that each standard is a superset of it's
predecessor. For example, the 128 characters of ASCII are the the first 128
characters of ANSI and the 256 characters of ANSI are the first 256
characters of UCS. This is one of the reasons that some people think that
ASCII and ANSI are the same thing, but the distinction is very important.

Although MS probably had some input into the UCS standard, they are not
responsible for any of them. All they do is provide access to anumber of
different methodologies for dealing with them (Encoding.ASCII,
Encoding.ANSI, Encoding.UTF7, etc.).

You're saying for global compatibility. Why would that have anything to
do with MS? Because they are the ones using 7 bit characters that are
stored in the byte array and used mainly on Windows platforms?

Brett said:
MeltingPoint said:
For some reason when I step into the code below, it jumps out on the
second iteration at the line I have marked below. Nothing else
happens - no errors.

Dim tcpClient As New System.Net.Sockets.TcpClient
tcpClient.Connect("127.0.0.1", 9005)

While True
Dim networkStream As NetworkStream =
tcpClient.GetStream()

'If networkStream.CanWrite And networkStream.CanRead
Then

' Do a simple write.
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is
anybody
there")
networkStream.Write(sendBytes, 0, sendBytes.Length)
' Read the NetworkStream into a byte buffer.
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0,
CInt(tcpClient.ReceiveBufferSize)) ' Output the data
received from the host to the console. Dim returndata As
String = Encoding.ASCII.GetString(bytes)



Step into jumps out at above line. The rest of the code follows:

Console.WriteLine(("Host returned: " + returndata))

' pause so user can view the console output
Console.ReadLine()
End While

tcpClient.Close()

There is a server version of the app that is sending data. Any
suggestions on how I can trace this down?

Thanks,
Brett




Not sure what you mean, 'jumps out'. Does that mean it throws an
exception? You can't 'step into' GetString() but I don't think thats
what you mean.

A quick solution would be to use DataAvailable:

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

OR the dangerous way...

Do
Loop Until networkStream.DataAvailable()

too see if anything ever comes. (maybe put a counter in there and
exit after a couple hundred loops :)

but i think your trying to read to soon, if you wait on
DataAvailable, all should work code wise.

MP

Very nice. The

If networkStream.DataAvailable() Then
networkStream.Read(...)
End If

code is working fine. I have a general question about the byte
array. Sending/receiving data via the tcp/ip streams or file streams
always uses the byte array. Why can't a regular string be used? What
is so special about the byte array?

Thanks,
Brett

I would say it mostly has to do with unicode. One byte characters
just don't do it on the global scale. By making you use
Encoding.ASCII/UTF8/UTF7/Unicode.GetString/GetBytes Microsoft is
reminding
you of which market your targeting/omitting.

You're saying for global compatibility. Why would that have anything to
do with MS? Because they are the ones using 7 bit characters that are
stored in the byte array and used mainly on Windows platforms?
 
S

Stephany Young

The 'symbols' referred to here are modules with symbolic debbugging
information in them. They are the 'things' that allow you to single step
code and set breakpoints in the IDE.

When you compile a program in 'debug' configuration these 'symbols' are
placed in the <yourapp>.pdb file.

In certain 'debug' versions of VS.NET which are not made available to 'joe
blow' the 'debug' versions of Framework DLL's are included which allow for
richer information to be displayed when an exception occurs.

Note that 'No Symbols loaded' is displayed appears when mscorlib.dll is
loaded but 'Symbols loaded' is displayed when your own client.exe is loaded.

These 'symbols' are not related in any way shape or form to unicode or any
other character set.

If you were of a mind to you could:

write a program that throws an exception

compile it for debug

run the program and note the information displayed when the exception is
thrown

compile it for release

run the program and note the information displayed when the exception is
thrown

You will see that the information displayed in 'debug' is much richer thatn
that displayed in 'release'.

The additional information is derived from the .pdb file which is known as
the 'symbols'.
 
S

Stephany Young

As you said, the app runs fine.

In short, yes - you can quite confidently ignore the messages about
'symbols' in this context.
 
B

Brett

My client and listener can connect fine on 127.0.0.1 port 9005. However,
once I upload the listener to my webserver and change to the web server IP,
I get the error below:

An unhandled exception of type 'System.Net.Sockets.SocketException' occurred
in system.dll

Additional information: No connection could be made because the target
machine actively refused it


I tried the IP address TcpListener() (on the server) as the remote server
and also as my local computer public IP. No luck. What could be causing
the above and how can I correct it?

Thanks,
Brett
 

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

Similar Threads

NNTP Client 4
TCP Transfer issues 3
TCP/IP 3
Testing client server application from single computer 3
Data Logger 1
sending xml over tcp/ip 7
a simple client example 3
send file 1

Top