Codigo Programa Servidor:
Dim SetPoint As Variant
Dim NombreUsuario As String
Private Sub Form_Load()
TxtSetPoint.Text = SetPoint
'************************************************* ************************
'Al cargar el program, lo primero que se debe hacer es capturar el nombre de la PC servidor
'para después enviarselo al cliente.
'************************************************* ************************
'Obtiene el nombre de usuario de la PC Servidor y la almacena en la variable
NombreUsuario = UCase$(Trim$(SockNivel(0).LocalHostName))
'Primero elegimos el puerto a usar para la conexión se recomienda usar un número alto
'porque los mas bajos se usan para servicios de Telnet: 80, FTP:21 , etc.
SockNivel(0).LocalPort = 1000
SockNivel(0).Listen 'Empezamos escuchando alguna conexión por el puerto 1000
FrmPrincipal.StatusBar1.Panels(4) = "Esperando Conexión de un Cliente Remoto"
LblNombServer.Caption = SockNivel(0).LocalHostName
LblServerIP.Caption = SockNivel(0).LocalIP
FrmPrincipal.Toolbar1.Buttons(4).Enabled = False
End Sub
Private Sub SockNivel_ConnectionRequest(index As Integer, ByVal requestID As Long)
SockNivel(0).Close
Mensaje2 = "Conexión de: " & SockNivel(index).RemoteHostIP
If index = 0 Then
LstUsuarios.AddItem (Mensaje2)
SockNivel(0).Accept requestID
Timer2.Enabled = True ‘Habilita el Timer para enviar el dato constantemente
‘cada 100 mseg.
DoEvents
End If
FrmPrincipal.StatusBar1.Panels(4) = "Cliente Remoto Conectado"
End Sub
Private Sub Timer2_Timer()
Call SockNivel(0).SendData(SetPoint) ‘Envia la variable SetPoint al cliente
End Sub
Codigo Programa Cliente
Option Explicit
Dim SetPoint As Integer
Dim Nivel As String
Private Sub CmdConectar_Click()
SockNivel(0).Connect "130.1.40.158", 1000 ‘conectado a la Direccion IP en el ‘ ‘ ‘puerto 1000
DoEvents
Timer1.Enabled = True
Timer1.Interval = Val(LblIntervalo.Caption)
End Sub
Private Sub SockNivel_Close(Index As Integer)
FrmPrincipal.StatusBar1.Panels(4) = "Desconectado del server INTELCOM"
SockNivel(0).Close
End Sub
Private Sub SockNivel_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Call SockNivel(0).GetData(SetPoint)
LblSetPoint.Caption = SetPoint
End Sub
Private Sub Timer1_Timer()
SetPoint = Val(LblSetPoint.Caption)
Nivel = Val(LblNivel.Caption)
CWNivel.Plots("Plot 1").ChartY SetPoint, 1 ‘Grafica el SetPoint
CWNivel.Plots("Plot 2").ChartY Nivel, 1
End Sub
Este es el código tanto para el Servidor como el Cliente, el problema es que cuando recibo el dato en el cliente me sale duplicado es decir de esta manera: (Estoy usando un timer a 100 mseg para enviar los datos)
Si envio 100 la primera vez llega 100, luego llega 100100
Si envio 110 la primera vez llega 110, luego llega 110110
Yo necesito que cada vez que cambie el valor en el servidor, me llegue el mismo valor al cliente.
El retardo al que me refiero es que cuando yo asigno a las variables como Integer, funciona correctamente pero hay una demora (retardo) en el cambio en el cliente, es decir:
Si envio la primera vez 100, al cliente llega 100.
Si cambi a 110, al cliente llega 110 pero se demora como 15 segundos en cambiar el valor.
Si vuelvo a enviar otro valor por ejemeplo 120, el tiempo que se demora en llegar al cliente es el doble es decir 30 segundos, y asi sucesivamente hasta que llega a un tiempo en donde nunca cambia y si cambia es demasiado lento.
Si hay alguien que domine o haya trabajado con este control winsock, por favor le agradecería me ayude urgente. Cualquier sugerencia me pueden escribir al siguiente mail:
[email protected]
Atte,
Macaspi