• Viernes 8 de Noviembre de 2024, 09:38

Autor Tema:  Control WinSock  (Leído 1513 veces)

ElFabro

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Control WinSock
« en: Domingo 29 de Agosto de 2010, 00:33 »
0
Hola, resulta que hice un programa aplicando el control winsock y siguiendo varios ejemplos vistos en internet.
Es una aplicacion cliente servidor.Cuando lo pruebo en mi maquina anda bien, pero cuando lo pruebo en dos maquinas diferentes no los datos no le llegan al servidor.
El programa es sencillo, senso datos de un microcontrolador, los mando por el puerto serie a la pc y de ahi los mando al servidor usando protocolo TCP.
A continuacion adjunto los codigos del cliente y el servidor.
La verdad no se por que no funcionan en dos maquinas diferentes.
No me equivoque ni en el puerto local ni en el hostname.

Programa del cliente:

Option Explicit
Dim Cadena As String
Dim t As Double
Public contador As Integer, variable As Boolean, Fecha As String, Hora As String, puertos As String
Public Temperatura As Double, Presion As Double, Humedad As Double
Public Ti As Integer, Pi As Integer, Hi As Integer
Const MAX = 15

Private Sub cargar_Click()

ete:
        dialogo.Filter = "txt|*.txt"
        dialogo.DialogTitle = "Cargar un archivo"
        dialogo.ShowOpen
        If dialogo.FileName = "" Then Exit Sub
        Cadena = dialogo.FileName
        Open Cadena For Output As #1
        On Error GoTo ete
        cargar.Enabled = False
        'Abre el puerto seleccionado
         MSComm1.PortOpen = True

End Sub

Private Sub cliente_ConnectionRequest(ByVal requestID As Long)

cliente.Close
cliente.Accept requestID

End Sub

Private Sub Command1_Click()

If Combo1.Text <> "" And (Asc(Combo1.Text) > 47 And Asc(Combo1.Text) < 58) Then
MSComm1.CommPort = Int(Combo1.Text)
Combo1.Enabled = False
Command1.Enabled = False
cargar.Enabled = True
End If

End Sub

Private Sub Command2_Click()

cliente.RemoteHost = Text1.Text
cliente.Connect
Text1.Enabled = False
Command2.Enabled = False

End Sub

Private Sub Form_Load()
       
        cargar.Enabled = False
        'Determina: 9600-Velocidad en Baudios, N-No utiliza ninguna paridad,
        '8-Cantidad de bits de envio y recepcion por paquete,
        '1-Determina los bits de parada
        MSComm1.Settings = "9600,N,8,1"
        'No existe control de flujo
        MSComm1.Handshaking = comNone
        'Lee todo el buffer de entrada para que quede vacio
        MSComm1.InputLen = 0
        'Cada vez que se recibe un caracter se producira el evento onComm
        MSComm1.RThreshold = 1
        t = 0
        contador = 10
        variable = False
        Temperatura = 0
        Presion = 0
        Humedad = 0
        Ti = 0
        Pi = 0
        Hi = 0
        'Nombre de los ejej X e Y
        GR.Axes(1).Caption = " Tiempo[seg]"
        GR2.Axes(1).Caption = " Tiempo[seg]"
        GR3.Axes(1).Caption = " Tiempo[seg]"
        GR.Axes(2).Caption = " Temperatura[ºC]"
        GR2.Axes(2).Caption = " Presión[Hp]"
        GR3.Axes(2).Caption = " Humedad[%]"
        'Color de las graficas. Por defecto GR2 es verde
        GR.Plots(1).LineColor = vbRed
        GR3.Plots(1).LineColor = vbBlue
        'Escala del eje Y
        GR.Axes(2).AutoScale = False
        GR.Axes(2).Minimum = 0
        GR.Axes(2).Maximum = 255
        GR2.Axes(2).AutoScale = False
        GR2.Axes(2).Minimum = 0
        GR2.Axes(2).Maximum = 255
        GR3.Axes(2).AutoScale = False
        GR3.Axes(2).Minimum = 0
        GR3.Axes(2).Maximum = 2.55
        With Combo1
        .AddItem 1
        .AddItem 2
        .AddItem 3
        .AddItem 4
        .AddItem 5
        .AddItem 6
        .AddItem 7
        .AddItem 8
        .AddItem 9
        .AddItem 10
        End With
       
'--------------------------------------------------------------------------------------
'Código que activa la captura de imágenesse supone un formulario con 2 picture llamados "picture1" y "picture2")

'hwndc = capCreateCaptureWindow("Ventana de Captura", ws_child Or ws_visible, 0, 0, cuadro1.Width, cuadro1.Height, cuadro1.hwnd, 0)
'If (hwndc <> 0) Then
'temp = SendMessage(hwndc, wm_cap_driver_connect, 0, 0)
'temp = SendMessage(hwndc, wm_cap_set_preview, 1, 0)
'temp = SendMessage(hwndc, WM_CAP_SET_PREVIEWRATE, PREVIEWRATE, 0)
'End If
'--------------------------------------------------------------------------------------
       
End Sub

Private Sub Form_Unload(Cancel As Integer)

If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
Close #1
cliente.Close

End Sub

Private Sub MSComm1_OnComm()

    Dim valor As String, YE As Integer
    If MSComm1.CommEvent = comEvReceive Then
    valor = MSComm1.Input
    Select Case Left(valor, 1)
    Case "T"
    contador = 0
    If cliente.State = 7 Then
    cliente.SendData Left(valor, 1)
    End If
    Case "P"
    contador = 1
    If cliente.State = 7 Then
    cliente.SendData Left(valor, 1)
    End If
    Case "H"
    contador = 2
    If cliente.State = 7 Then
    cliente.SendData Left(valor, 1)
    End If
    End Select
    If contador = 0 And Left(valor, 1) <> "T" And Left(valor, 1) <> "P" And Left(valor, 1) <> "H" Then
    YE = Asc(Right(valor, 1))
    Temperatura = Temperatura + YE
    Ti = Ti + 1
    If Ti = MAX Then
    Temperatura = Temperatura / Ti
    'Trunco a dos decimales
    Temperatura = FormatNumber(Temperatura, 2)
    GR.ChartXvsY t, Temperatura
    Ti = 0
    Label2.Caption = Temperatura & " Grados Celsius"
    t = t + 1
    Print #1, Temperatura & " grados Celsius"
    If cliente.State = 7 Then
    cliente.SendData Str(Temperatura)
    End If
    Temperatura = 0
    End If
    End If
    If contador = 1 And Left(valor, 1) <> "T" And Left(valor, 1) <> "P" And Left(valor, 1) <> "H" Then
    YE = Asc(Right(valor, 1))
    Presion = Presion + YE
    Pi = Pi + 1
    If Pi = MAX Then
    Presion = Presion / Pi
    'Trunco a dos decimales
    Presion = FormatNumber(Presion, 2)
    GR2.ChartXvsY t, Presion
    Pi = 0
    Label6.Caption = Presion & " Hecto pascales"
    t = t + 1
    Print #1, Presion & " hecto pascales"
    If cliente.State = 7 Then
    cliente.SendData Str(Presion)
    End If
    Presion = 0
    End If
    End If
    If contador = 2 And Left(valor, 1) <> "T" And Left(valor, 1) <> "P" And Left(valor, 1) <> "H" Then
    YE = Asc(Right(valor, 1))
    Humedad = Humedad + YE
    Hi = Hi + 1
    If Hi = MAX Then
    Humedad = Humedad / Hi
    Humedad = Humedad / 100
    'Trunco a dos decimales
    Humedad = FormatNumber(Humedad, 2)
    GR3.ChartXvsY t, Humedad
    Hi = 0
    Label8.Caption = Humedad & " %"
    t = t + 1
    variable = True
    Print #1, Humedad / 100 & " %"
    If cliente.State = 7 Then
    cliente.SendData Str(Humedad)
    End If
    Humedad = 0
    End If
    End If
    If variable = True Then
    Fecha = Date$
    Hora = Time$
    Print #1, Fecha
    Print #1, Hora
    variable = False
    End If
    End If

End Sub

Private Sub acercade_Click()

AD.Show vbModal

End Sub

Programa del servidor:

Public Variable As String, tiempo As Integer, contador As Integer
Public Temperatura As String, Presion As String, Humedad As String
Public llave As Boolean
Const Lim = 75

Private Sub acercade_Click()

AD.Show vbModal

End Sub

Private Sub Form_Load()

        GR.Axes(1).Caption = " Tiempo[seg]"
        GR2.Axes(1).Caption = " Tiempo[seg]"
        GR3.Axes(1).Caption = " Tiempo[seg]"
        GR.Axes(2).Caption = " Temperatura[ºC]"
        GR2.Axes(2).Caption = " Presión[Hp]"
        GR3.Axes(2).Caption = " Humedad[%]"
        GR.Plots(1).LineColor = vbRed
        GR3.Plots(1).LineColor = vbBlue
        GR.Axes(2).AutoScale = False
        GR.Axes(2).Minimum = 0
        GR.Axes(2).Maximum = 255
        GR2.Axes(2).AutoScale = False
        GR2.Axes(2).Minimum = 0
        GR2.Axes(2).Maximum = 255
        GR3.Axes(2).AutoScale = False
        GR3.Axes(2).Minimum = 0
        GR3.Axes(2).Maximum = 2.55
       
        Temperatura = 0
        tiempo = 0
        contador = 0
        llave = True
               
        servidor.Listen
               
End Sub

Private Sub Form_Unload(Cancel As Integer)

        servidor.Close

End Sub

Private Sub servidor_ConnectionRequest(ByVal requestID As Long)
       
        servidor.Close
        servidor.Accept requestID
       
End Sub

Private Sub servidor_DataArrival(ByVal bytesTotal As Long)

        servidor.GetData Variable
        Select Case Variable
        Case "T"
        contador = 1
        Case "P"
        contador = 2
        Case "H"
        contador = 3
        End Select
        If contador = 1 And Variable <> "T" And Variable <> "P" And Variable <> "H" Then
        GR.ChartXvsY tiempo, Val(Variable)
        Label2.Caption = Val(Variable) & " Grados Celsius"
        contador = 0
        List1.AddItem (Variable & " Grados Celsius")
        End If
        If contador = 2 And Variable <> "T" And Variable <> "P" And Variable <> "H" Then
        GR2.ChartXvsY tiempo, Val(Variable)
        Label3.Caption = Val(Variable) & " Hecto pascales"
        contador = 0
        List1.AddItem (Variable & " Hecto pascales")
        End If
        If contador = 3 And Variable <> "T" And Variable <> "P" And Variable <> "H" Then
        GR3.ChartXvsY tiempo, Val(Variable)
        tiempo = tiempo + 1
        Label5.Caption = Val(Variable) & " %"
        contador = 0
        List1.AddItem (Variable & " %")
        End If
       
End Sub

Private Sub servidor_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)
       
        servidor.Close
       
End Sub