Alenhj Alenhj - 4 months ago 34
Vb.net Question

Telnet TcpClient Attempt

First of all, Thanks to everyone you has helped me try to figure out Tcpclients. (Though there is still a lot I don't understand)

I can across a thread in the MSDN.Microsoft Forms about an Tcpclient GUI freezing up. Have little to no success on my front of trying to Telnet to an network switch and knowing what the problem with the code was I gave it a try.
I about ran circles around my work area when I received an response back from the switch is was only "

******
" but is was the same amount of characters that I sent out.

So right now my questions are:
Did it actually do through?
Did it submit the command?
What is the best was to send more commands?

The part that freezes is when it tries to read the response from the switch but since I don't actually need any response back I can do away with that part of the code.

Any feed back, suggestion, examples, or online reading material(I really hate the telnet documentation by the way.) would be greatly appreciated.

Code from form:

Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Public Class Form1
Dim tagid As String
Dim tcpClient As New System.Net.Sockets.TcpClient
Dim networkStream As NetworkStream

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
tcpClient.Connect("IP address", 23)
networkStream = tcpClient.GetStream()
MessageBox.Show("connected")
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If networkStream.CanWrite And networkStream.CanRead Then
Dim sendBytes("String".Length) As Byte
sendBytes = Encoding.ASCII.GetBytes("String")

'I don't really need this part....I think.

Dim x As Integer = 1

Do While x = 1
networkStream.Write(sendBytes, 0, sendBytes.Length)
Dim bytes(tcpClient.ReceiveBufferSize) As Byte

networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
Dim returndata As String = Encoding.ASCII.GetString(bytes)

TextBox1.Text = returndata
tagid = TextBox1.Text
TextBox1.Refresh()
Loop
Else
If Not networkStream.CanRead Then
Console.WriteLine("cannot not write data to this stream")
tcpClient.Close()
Else
If Not networkStream.CanWrite Then
Console.WriteLine("cannot read data from this stream")
tcpClient.Close()
End If
End If
End If
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
networkStream.Close()
tcpClient.Close()
End Sub
End Class


I know I have to rework this code but right now it is more of getting a success.

Thank you.

Answer

IT WORKS!!! Sorry...Redbull

I found out my problem was a timing issue as when as not having my textbox large enough to see the received data from the switch.

Here is a Sample of what worked for me.

Imports System.Net.Sockets

Imports System.Text

Public Class Form1

Private oTCPStream As Net.Sockets.NetworkStream

Private oTCP As New Net.Sockets.TcpClient()

Private bytWriting As [Byte]()

Private bytReading As Byte()

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Try

        TextBox1.Text = ""

        oTCP.SendTimeout = 1500

        oTCP.Connect("IP Address", "23")

        oTCPStream = oTCP.GetStream

        TextBox1.Text = TextBox1.Text & ReadData() & vbCrLf 'Reads data from switch/server and displays it in a textbox

        WriteData("command" & vbCrLf) 'This line can repeated as many times as you like. You just need to adjust the time the application waits before starting the next line of code.

        System.Threading.Thread.Sleep(500) 'Pauses the application before starting the next line of code.

        TextBox1.Text = TextBox1.Text & ReadData() & vbCrLf
oTCPStream.Close() 'Closed the NetworkStream

        oTCP.Close()'Closed the TcpClient/Socket

        MsgBox("connection ok")

    Catch Err As Exception

        MsgBox(Err.ToString)

    End Try

End Sub

Private Function ReadData() As String

    Dim sData As String

    ReDim bytReading(oTCP.ReceiveBufferSize)

    oTCPStream.Read(bytReading, 0, oTCP.ReceiveBufferSize)

    sData = Trim(System.Text.Encoding.ASCII.GetString(bytReading))

    ReadData = sData

End Function

Private Sub WriteData(ByVal sData As String)

    bytWriting = System.Text.Encoding.ASCII.GetBytes(sData)

    oTCPStream.Write(bytWriting, 0, bytWriting.Length)

End Sub
End Class

This is mostly for individuals like myself that are learning something new. Also, this is the only code I used. I did not make a Server Application since the Switch already had an Telnet Server on it.

Comments