[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1857
  • Last Modified:

VB6 Telnet Winsock Run-Time Error '40006'

I am using the following code -

Private Sub Connect_Click()
    Winsock1.Connect ("192.168.1.1"), 23
    Winsock1.SendData "admin" & vbCrLf
End Sub

and basically get the error - Run-Time Error '40006'

I can avoid this error by having two seperate buttons, one to connect and one to issue the SendData command, or by using the following function -

Private Sub Winsock1_Connect()
   Winsock1.SendData "admin" & vbCrLf
End Sub

But I do not want to use either of these methods, I just want everything to be included in the one button.

Please help!
0
souldigital
Asked:
souldigital
  • 5
  • 4
1 Solution
 
ZhaolaiCommented:
You have to wait for the connection to be completed before sending data.
Try this:


Private Sub Connect_Click()
    Winsock1.Connect ("192.168.1.1"), 23
    Do While Winsock1.State = sckConnected
        Winsock1.SendData "admin" & vbCrLf
        Exit Do
    Loop
End Sub

Open in new window

0
 
ZhaolaiCommented:
Oooop, a mistake in the loop.
Try this:


Private Sub Connect_Click()
    Winsock1.Connect ("192.168.1.1"), 23
    Do While True
        If Winsock1.State = sckConnected Then
            Winsock1.SendData "admin" & vbCrLf
            Exit Do
        End If
    Loop
End Sub

Open in new window

0
 
souldigitalAuthor Commented:
This loop creates 100% cpu usage and crashes VB  :-s
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
ZhaolaiCommented:
Aha, I don't think that the code in my above posts will work.
Please refer to the following link:

http://kbalertz.com/Feedback.aspx?kbNumber=183987

It looks like that you have to call the Connect event to send data.
Sorry for the confusion.
0
 
souldigitalAuthor Commented:
This is the same as using 2 buttons, one to connect and one to execute the command, but instead of using a button to connect it does it on form load which sadly is no good.

??????????????????????????????
0
 
ZhaolaiCommented:
No, you don't need to have two buttons. The Connect event will fire automatically once the connection is complete.

All you need is a button to initiate the connection. See below:



Private Sub Connect_Click()
    Winsock1.Connect ("192.168.1.1"), 23
End Sub

'This event fires automatically once the connection is complete.
Private Sub Winsock1_Connect()
   Winsock1.SendData "admin" & vbCrLf
End Sub

'You may need the following event to capture any connection error

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox "Error occurred: " & Description, vbExclamation, "Connection Error"
End Sub

Open in new window

0
 
JoeNuvoCommented:
either follow above comment by using the default event _Connect

or

if you sure that the "server" you try to connect to always ready to accept connection.
you may put some delay after you call for connect

' this code, put on top at global variable declare
Private Declare Sub Sleep Lib "Kernel32.dll" (ByVal dwMilliseconds As Long)


Private Sub Connect_Click()
   Winsock1.Connect ("192.168.1.1"), 23

    for i = 1 to 100
       sleep 1   ' try adjust number of loop, or adjust number of sleep time to match your need
       doevents
   next

    Winsock1.SendData "admin" & vbCrLf
End Sub
0
 
souldigitalAuthor Commented:
Yes it will fire when the connection is complete but I need to issue different commands depending on which button I click.

Button A - Winsock1.SendData "admin" & vbCrLf

Button B - Winsock1.SendData "tx power" & vbCrLf

Button C - Winsock1.SendData "help" & vbCrLf

and so on

So I need it to connect, send the data then disconnect all in one button without using any Sub Winsock1_Connect()

I have tried a timer before with a 10second pause and it still gives the same error. It is almost as if you have to End Sub before the connection is fully established?

I can literally click connect (Button 1) then send a command (Button 2) with no delay and it works fine.
0
 
ZhaolaiCommented:
Now I see why you want to have all the code in one sub... But unfortunately that's not the way it designed.
Try the following code:


Private iButton As Integer

Private Sub Command1_Click()
    iButton = 1
    ConnectWinsock
End Sub

Private Sub Command2_Click()
    iButton = 2
    ConnectWinsock
End Sub

Private Sub Command3_Click()
    iButton = 3
    ConnectWinsock
End Sub

Private Sub ConnectWinsock()
    Winsock1.Close
    Winsock1.Connect "192.168.1.1", 23
End Sub

Private Sub Winsock1_Connect()
    Select Case iButton
        Case 1: Winsock1.SendData "admin" & vbCrLf
        Case 2: Winsock1.SendData "tx power" & vbCrLf
        Case 3: Winsock1.SendData "help" & vbCrLf
    End Select
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox "Error occurred: " & Description
End Sub

Open in new window

0
 
souldigitalAuthor Commented:
Perfect, thanks!
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 5
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now