【发布时间】:2014-09-18 19:16:20
【问题描述】:
我需要创建一个应用程序,该应用程序需要通过 telnet 连接将数据从外部终端预订设备检索到我的应用程序,并将其显示在 txtOutput 文本框上。
我是 VB 的新手,花了一些时间学习该语言的基础知识。
首先,我创建了一个标准 EXE 项目并将 Winsock 控件添加到表单中。 我也向我想要连接的 IP 地址发出了 ping 请求,它可以正常工作。
然后我想向外部设备发送命令。我希望预订终端向我提供对 txtOutput 的反馈以供我阅读。
我建立了连接,据我所知,我确实将消息发送到终端。但我没有得到任何回应!在我的 txtOutput 上看不到任何内容。
怎么可能?
这是我的代码:
Dim IPAddress As String
Dim PortNum As Integer
Private Sub cmdConnect_Click()
Winsock.Close
Winsock.RemoteHost = txtIpaddress.Text
IPAddress = Winsock.RemoteHost
PortNum = CStr(txtPortnr.Text)
If (Val(PortNum) > 65535) Then
Winsock.RemotePort = (Val(PortNum) - 65535)
PortNum = Winsock.RemotePort
Else
Winsock.RemotePort = Val(PortNum)
PortNum = Winsock.RemotePort
End If
Winsock.Connect
Module1.send_to_buffer ("Attempting connection to: " & IPAddress & ":" & CStr(PortNum))
Call wsock_status
End Sub
Private Sub Winsock_Connect()
Module1.send_to_buffer ("Succeeded connection to: " & IPAddress & ":" & CStr(PortNum))
txtSend.SetFocus
End Sub
Private Sub cmdSend_Click()
Dim strSData As String
Dim message_to_send As String
If (Winsock.State = 0) Then
Module1.send_to_buffer ("You need to connect first!")
txtSend.Text = ""
Else
strSData = txtSend.Text
Winsock.SendData strSData & vbCrLf
message_to_send = txtSend.Text
If (message_to_send <> "") Then
Winsock.SendData message_to_send & vbCrLf
Module1.send_to_buffer_norm (txtSend.Text)
txtSend.Text = ""
txtSend.SetFocus
Else
Module1.send_to_buffer ("Nothing to send!")
txtSend.Text = ""
txtSend.SetFocus
End If
End If
End Sub
Private Sub terminalConnector_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock.GetData strData
If (Len(txtOutput.Text) = 0) Then
txtOutput.Text = strData & vbCrLf
Else
txtOutput.Text = txtOutput.Text & strData & vbCrLf
End If
End Sub
Private Sub cmdDisconnect_Click()
Dim Counter As Long
If (Winsock.State <> 0) Then
Winsock.Close
Call wsock_status
Module1.send_to_buffer ("Connection to " & IPAddress & ":" & CStr(PortNum) & " closed.")
End If
End Sub
Private Sub Winsock_Close()
Module1.send_to_buffer ("Disconnected from: " & IPAddress & ":" & CStr(PortNum))
Winsock.Close
End Sub
和Module1代码:
Public Function send_to_buffer(text_to_display As String)
If (Len(terminalConnector.txtOutput.Text) = 0) Then
terminalConnector.txtOutput.Text = "*** " & text_to_display
Else
terminalConnector.txtOutput.Text = terminalConnector.txtOutput.Text & vbCrLf & "*** " & text_to_display & vbCrLf & vbCrLf
End If
End Function
Public Function send_to_buffer_norm(text_to_input As String)
If (Len(terminalConnector.txtOutput.Text) = 0) Then
terminalConnector.txtOutput.Text = "> " & text_to_input & vbCrLf
Else
terminalConnector.txtOutput.Text = terminalConnector.txtOutput.Text & "> " & text_to_input & vbCrLf
End If
End Function
提前致谢
【问题讨论】:
-
这里有问题吗?我们看到您的代码,但您没有指出问题所在。尝试保存时是否出现错误?
-
我已经编辑了文本,谢谢
-
你说的这个“终端”是什么?您的回答对任何解决方案都有重要影响。但是刚开始您的程序可能必须是 TCP 服务器,而不是客户端,此外,大多数称为“终端”的设备都需要一些最小的协议层,例如Telnet,位于 TCP 之上。
-
我所说的终端,就像你在下班预约时使用的预约终端。
-
Telnet 连接只是基于 TCP/IP 的协议;您必须主要通过 TCP 发送和接收纯文本和一些控制代码。我建议您了解 telnet 协议 - 例如这里:pcmicro.com/netfoss/telnet.html - 并实现您所需的子集。