Telnet TcpClient尝试

时间:2015-03-11 13:25:14

标签: vb.net telnet tcpclient

首先,感谢大家帮助我试图找出Tcpclients。 (虽然还有很多我不明白的事情)

我可以跨越MSDN.Microsoft表单中关于Tcpclient GUI冻结的线程。在尝试Telnet到网络交换机的前面几乎没有成功,并且知道代码的问题是我尝试了一下。 当我收到来自开关的响应时,我在我的工作区周围跑圈子只是“******”但是我发出的字符数量相同。

现在我的问题是: 它真的完成了吗? 它提交了命令吗? 什么是最好的发送更多的命令?

冻结的部分是当它试图从交换机读取响应但由于我实际上不需要任何响应,我可以取消代码的那部分。

任何反馈,建议,示例或在线阅读材料(我真的很讨厌telnet文档。)将不胜感激。

表单中的代码:

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

我知道我必须重做这段代码,但现在它更多的是取得成功。

谢谢。

1 个答案:

答案 0 :(得分:0)

IT工作!!! 遗憾...红牛

我发现我的问题是时间问题,因为我的文本框不够大,无法看到来自交换机的接收数据。

这是一个对我有用的样本。

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

这主要是针对像我这样正在学习新事物的人。 此外,这是我使用的唯一代码。我 没有 制作服务器应用程序,因为Switch上已经有一个Telnet服务器。