Este es un ejemplo con CSocketPlus es igual que el CSocketMaster solo que:
CSocketPlu= Usa Arrays
CSocketMaster= No usa Array
PERO SUS EVENTOS SON LOS MISMOS Tomando en cuenta la diferencia de INDEX
A lo que voy es que pruebes con poner el ConnectionRequestID:
Para CSocketMaster:
Revisa este por que no cuento con los archivos del CSocketMaster asi que deduci lo siguiente...¡!
Dim WithEvents ws0 As CSocketPMater
'En un procesoX
Set ws0 = New CSocketMaster
'ws0.CloseSck 'Cuando agregas uno ya esta cerrado por logica
ws0.LocalPort = 453
ws0.Listen
'Fin de Proceso X
Private Sub ws0_ConnectionRequest(ByVal requestID As Long)
ws0.CloseSck
ws0.Accept requestID
End Sub
Private Sub ws0_DataArrival(ByVal bytesTotal As Long)
Dim datos As String
ws0.GetData datos, vbString
Text1 = Text1 & vbCrLf & datos
End Sub
Para CSocketPlus
Dim WithEvents ws0 As CSocketPlus
'En un procesoX
Set ws0 = New CSocketPlus
ws0.ArrayAdd 0
'ws0.CloseSck 0 'Cuando agregas uno ya esta cerrado por logica
ws0.LocalPort(0) = 453
ws0.Listen 0
'Fin de Proceso X
Private Sub ws0_ConnectionRequest(ByVal Index As Variant, ByVal requestID As Long)
ws0.CloseSck Index
ws0.Accept Index, requestID
End Sub
Private Sub ws0_DataArrival(ByVal Index As Variant, ByVal bytesTotal As Long)
Dim datos As String
ws0.GetData Index, datos, vbString
Text1 = Text1 & vbCrLf & datos
End Sub
Como viste la unica diferencia es que en uno siempre se maneja una variable index (CSocketPluys) y en otro no (CSocketMaster).
Para ver si esta conectado o no sin usar timer en donde usas el Sock con el evento Connect es decir el cliente no el servidor (en el source donde espesificas el ip a conectar). puedes meter estos eventos
CSocketMaster:
Private Sub ws0_Connect()
MsgBox "Socket Conectado"
End Sub
Private Sub ws0_CloseSck()
MsgBox "Socket Desconectado"
End Sub
Private Sub ws0_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 "Sock Error"
End Sub
CSocketPlus
Private Sub ws0_Connect(ByVal Index As Variant)
MsgBox "Socket Conectado"
End Sub
Private Sub ws0_CloseSck(ByVal Index As Variant)
MsgBox "Socket Desconectado"
End Sub
Private Sub ws0_Error(ByVal Index As Variant, 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 "Sock Error"
End Sub
P.D.: Con respecto a la DNS sea cual sea (No-ip,dyndns o como sea "X") deberias rectificar los puetos que deberias abrir para tal acción, tanto en firewall de windows como de av como los de router si llegases a usar (Esto va en su foro correspondiente).
Dulces Lunas¡!