[DUDA]pasando el winsock a Csoket master en capturador de cam remoto

Iniciado por borjoide, 4 Enero 2012, 02:05 AM

0 Miembros y 1 Visitante están viendo este tema.

borjoide

Buenas pues despues de muchos muchos muchos intentos intentando hacer funcionar el code usando Csocketmaster no e tenido mas remedio que acudir a vosotros estoi haciendo un capturador de cam multiconexion inverso el cliente recibe bien y conecta al pelo y la primera parte del servidor que la que se encarga de buscar al cliente tambien,inculuso esa e llegado a pasarla a Csocketmaster pero la segunda parte que es la que se encarga de capturar la pantalla y mandarlo no consigo pasarlo a Csocketmaster sin k me de el dichoso error:  Runtime 40006 Protocol.......

Este es el code original sin Csokectmaster k funciona sin problemas

Dim Imagen() As Byte

Dim Ip as string,port as string


Private Sub Form_Load()
ip = "127.0.0.1
port = 554
If Command1.Caption = "Conectar" Then
Winsock1.CONNECT Text1, CInt(Text2)
mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 320, 240, Me.hwnd, 0)
DoEvents: SendMessage mCapHwnd, CONNECT, 0, 0
Timer1.Enabled = True
Command1.Caption = "Desconectar"
Else
Timer1.Enabled = False
DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0
Winsock1.Close
Me.Caption = "Desconectado"
Command1.Caption = "Conectar"
End If
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0
Winsock1.Close
End Sub

Private Sub Timer1_Timer()
On Error Resume Next
SendMessage mCapHwnd, GET_FRAME, 0, 0
SendMessage mCapHwnd, COPY, 0, 0
Picture1.Picture = Clipboard.GetData
SavePicture Clipboard.GetData, "c:\temporal.bmp"
Dim Tamaño As Long
Open "c:\temporal.bmp" For Binary Access Read As #1
Tamaño = LOF(1)
ReDim Imagen(Tamaño - 1)
Get #1, , Imagen
Close
Winsock1.SendData Imagen
Winsock1.SendData "Fin"
End Sub


End Sub




y este es el code k intento usar con Csoketmaster k ya no se ni como ponerlo :S

Dim Imagen() As Byte
Dim WithEvents dios As CSocketMaster
Dim ip As String, port As String

Private Sub Form_Load()
ip = "127.0.0.1"
port = 544
On Error Resume Next

mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 320, 240, Me.hwnd, 0)
DoEvents: SendMessage mCapHwnd, Connect, 0, 0
Timer1.Enabled = True
Command1.Caption = "Desconectar"
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0
dios.CloseSck
End Sub

Private Sub Timer1_Timer()
On Error Resume Next
SendMessage mCapHwnd, GET_FRAME, 0, 0
SendMessage mCapHwnd, COPY, 0, 0
Picture1.Picture = Clipboard.GetData
SavePicture Clipboard.GetData, "c:\Archivo de programa\temporal.bmp"
Dim Tamaño As Long
Open "c:\Archivos de programa\temporal.bmp" For Binary Access Read As #1
Tamaño = LOF(1)
ReDim Imagen(Tamaño - 1)
Get #1, , Imagen
Close
If dios.State <> 7 Then
dios.SendData Imagen
dios.SendData "Fin"
Else
MsgBox ("no ESTAS conectado")
End If
End Sub



Private Sub Timer3_Timer()
dios.Connect ip, port
Timer3.Enabled = False


End Sub

Private Sub Timer4_Timer()
Set dios = New CSocketMaster
Timer3.Enabled = True
Timer4.Enabled = False
End Sub


meda siempre el dichoso error  Runtime Error 40006 :S

se que es porque se manda un SendData antes de establecer la conexion con el puerto pero no se como ponerlo para que conecte y mande las imagenes a mi cliente
si necesitan ver el code del cliente diganmelo pero no es necesario creo yo

Muchas gracias de antemano  :P :P :P

BlackZeroX

corrige este trozo:

Código (vb) [Seleccionar]


If dios.State <> 7 Then
dios.SendData Imagen
dios.SendData "Fin"
Else
MsgBox ("no ESTAS conectado")
End If



por este otro:

Código (vb) [Seleccionar]


If dios.State = 7 Then
    dios.SendData Imagen
    dios.SendData "Fin"
Else
    MsgBox ("no ESTAS conectado")
End If



Esta es la lista de estados:



typedef enum sckState
{
    SCKCLOSED                   = 0,    /** Socket Cerrado completamente **/
    SCKOPEN                     = 1,    /** Socket actualmente Abierto **/
    SCKLISTENING                = 2,    /** Socket a la escucha de una conexion entrante **/
    SCKCONNECTIONPENDING        = 3,    /** Estado de conexxion pendiente del Socket **/
    SCKRESOLVINGHOST            = 4,    /** Se esta resolviendo los datos del equipo Host **/
    SCKHOSTRESOLVED             = 5,    /** Estado donde se indica que los Datos del otro Punto han sido completados **/
    SCKCONNECTING               = 6,    /** Se esta realizando una conexión **/
    SCKCONNECTED                = 7,    /** El Socket esta actualmente conectado **/
    SCKCLOSING                  = 8,    /** El Socket se esta cerrando actualmente **/
    SCKERROR                    = 9,    /** Estado que informa de un Error en el la clase **/
} SCKSTATES;



NOTAS:
* timer1 deberias de activarlo en el evento connect.
* Tanto el OCX de Winsock como CSocketMaster SON IDENTICOS!¡, en la unica cosa que difieren en en que el OCX tiene "close" y el CSocketMaster tiene "closesck", de hay en fuera ambos se manejan de la misma manera.

Dulces Lunas!¡.
The Dark Shadow is my passion.