Results 1 to 6 of 6

Thread: [RESOLVED] Winsock problem? Not sure -- Shuttingdown Multiple PCs on Network

Threaded View

  1. #3

    Thread Starter
    Member
    Join Date
    May 2008
    Location
    Moorhead, MN
    Posts
    37

    Re: [RESOLVED] Winsock problem? Not sure -- Shuttingdown Multiple PCs on Network

    Quote Originally Posted by DigiRev
    I see a few problems.

    1. You're using the UDP protocol so the ConnectionRequest() event won't fire (UDP is a "connectionless" protocol).

    2. On client (Shutdown.vbp) you are specifying the RemoteHost as "0.0.0.0". That should be the IP of the computer you are shutting down. If you are shutting down all computers on the network I would enumerate all computers on the network and loop through them (I can help with this if you want).

    3. On client again, you are specifying RemotePort as "0". Make this a different number (1 - 65535). The server (System32control) needs to listen on this same port.

    4. On server (System32control), you're using the TCP protocol. Both programs need to be using the same protocol (UDP). Instead of Socket1.Listen it should be: Socket1.Bind <Port>, "192.168.1.101" which is the LAN IP of the server.

    I don't use UDP myself, but try fixing those things and see what happens. I can write an example if you need me to.
    1. Should be fixed.

    2. It was because I got an error at first but that was when the code was not complete so it was just a piece of code I should have removed but didnt. (My mistake) However, I am not in full understanding of how to use a loop for this properly (I tried and ended up just doing the multiple subs back and forth as my "loop") So any help creating the loop would be much appreciated.

    3. Should be fixed.

    4. Method changed to UDP now. Wasn't sure where sckRecieve.bind was supposed to go so I put it in the form load assuming if it was declared one time that would make it be declared throughout the entirety of the program? However I did just use the LocalIP was that incorrect? Do I need to define one or does pulling it from the local machine suffice?

    Heres my new code:

    Reciever Code:
    1. Private Sub Form_Load()
    2.     'frmSys32Control.Hide
    3.     sckRecieve.Protocol = sckUDPProtocol
    4.     sckRecieve.LocalPort = 4955
    5.     sckRecieve.RemotePort = 4955
    6.     sckRecieve.Bind ("4955"), LocalIP
    7. End Sub
    8.  
    9.  
    10. Private Sub sckRecieve_DataArrival(ByVal bytesTotal As Long)
    11.     Dim strData As String
    12.     sckRecieve.GetData strData
    13.     If strData = "shutdown" Then
    14.         MsgBox "shutdown"
    15.         'shell "shutdown -s -t 10"
    16.     ElseIf strData = "restart" Then
    17.         MsgBox "restart"
    18.         'shell "shutdown -r -t 10"
    19.     Else
    20.         'do nothing
    21.     End If
    22.    
    23. End Sub

    Sender Code:
    1. Option Explicit
    2. Dim varA As String
    3. Dim strCommand As String
    4. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    5. Dim Result As String
    6.  
    7. Public Sub Wait(HalfSeconds As Single)
    8.  Dim lMilliSeconds As Long
    9.  lMilliSeconds = HalfSeconds * 500
    10.  Sleep lMilliSeconds
    11. End Sub
    12.  
    13. Public Sub CmdSend1()
    14.     Dim strHostIP As String
    15.     If varA >= 256 Then
    16.         Exit Sub
    17.     ElseIf varA < 256 Then
    18.         sckSend.RemotePort = strHostPort
    19.         strHostIP = "192.168.0." & varA
    20.         varA = varA + 1
    21.         sckSend.RemoteHost = strHostIP
    22.         sckSend.SendData strCommand
    23.         Call Wait(1)
    24.         Call CmdSend2
    25.     Else
    26.         MsgBox "Talk to Josh if the problem persists.", vbCritical
    27.     End If
    28. End Sub
    29.  
    30. Public Sub CmdSend2()
    31.     Dim strHostIP As String
    32.     If varA >= 256 Then
    33.         Exit Sub
    34.     ElseIf varA < 256 Then
    35.         strHostIP = "192.168.0." & varA
    36.         varA = varA + 1
    37.         sckSend.RemoteHost = strHostIP
    38.         sckSend.SendData strCommand
    39.         Call Wait(1)
    40.         Call CmdSend1
    41.     Else
    42.         MsgBox "Talk to Josh if the problem persists.", vbCritical
    43.     End If
    44.     If Result = 1 Then
    45.         'do nothing because the question has already been answered
    46.     Else
    47.         If strCommand = "restart" Then
    48.             Result = MsgBox("Restart is now complete. Exit the program if you wish.", vbOKOnly)
    49.             If Result = 1 Then
    50.                 Exit Sub
    51.             Else
    52.                 MsgBox "Error, more info here"
    53.             End If
    54.         ElseIf strCommand = "shutdown" Then
    55.             Result = MsgBox("Shutdown is now complete. Exit the program if you wish.", vbOKOnly)
    56.             If Result = 1 Then
    57.                 Exit Sub
    58.             Else
    59.                 MsgBox "Error, more info here"
    60.             End If
    61.         End If
    62.     End If
    63. End Sub
    64.  
    65. Private Sub cmdRestart_Click()
    66.     Dim Result As String
    67.     Result = MsgBox("Are you sure you want to Restart all PC's?", vbYesNo)
    68.     If Result = 6 Then
    69.         MsgBox "Do not press anything for approxamitely one or two minutes. Restart in progress", vbCritical
    70.         varA = 0
    71.         strCommand = "restart"
    72.         Call CmdSend1
    73.     Else
    74.         'do nothing
    75.     End If
    76. End Sub
    77.  
    78. Private Sub cmdShutdown_Click()
    79.     Dim Result As String
    80.     Result = MsgBox("Are you sure you want to Shutdown all PC's?", vbYesNo)
    81.     If Result = 6 Then
    82.         MsgBox "Do not press anything for approxamitely one or two minutes. Shutdown in progress", vbCritical
    83.         varA = 250
    84.         strCommand = "shutdown"
    85.         Call CmdSend1
    86.     Else
    87.         'do nothing
    88.     End If
    89. End Sub
    90.  
    91. Private Sub Form_Load()
    92.     Result = 0
    93.     sckSend.Protocol = sckUDPProtocol
    94.     sckSend.RemoteHost = "192.168.0.0"
    95.     sckSend.RemotePort = 4955
    96. End Sub

    There code should be cleaned up a bit... Thanks DigiRev for the help so far!

    It works! Excellent, thank you again DigiRev about that loop to clean it up though? Could you help me with that? I don't quite understand how to use the loop in anyway that doesn't crash my computer (which I've been told is counter-productive)
    Last edited by Genovah; May 4th, 2008 at 08:34 AM. Reason: Resolved
    -- Josh Smith
    C#, VB, PHP, SQL

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width