* se conecta con exito, y envia datos con exito , el problema es hacer la funcion de descarga,
Código
el problema esta ak, en Socket_Evento , no recibe la llamada de SetWindowLong, me podrian echar una manito
Private Declare Function htons Lib "wsock32.dll" (ByVal hostshort As Long) As Integer Private Declare Function Connect Lib "wsock32.dll" Alias "connect" (ByVal s As Long, addr As SOCKADDR, ByVal namelen As Long) As Long Private Declare Function Send Lib "wsock32.dll" Alias "send" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long) As Long Private Declare Function Socket Lib "wsock32.dll" Alias "socket" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long Private Declare Function DestroyWindow Lib "user32.dll" (ByVal hWnd As Long) As Long Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVR As Long, lpWSAD As WSADataType) As Long Private Declare Function WSACleanup Lib "wsock32.dll" () As Long Private Declare Function inet_addr Lib "wsock32.dll" (ByVal cp As String) As Long Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function recv Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long) As Long Private Const SOCK_STREAM As Long = 1 Private Const AF_INET As Long = 2 Private Const IPPROTO_TCP As Long = 6 Private Called As Long Private Callad As Long Public SocketHandle As Long Public Len_Bytes_Enviados As Long Public Status As Long Public m_ObjectHost As Object Private Type SOCKADDR sin_family As Integer sin_port As Integer sin_addr As Long sin_zero As String * 8 End Type Private Type WSADataType wVersion As Integer wHighVersion As Integer szDescription As String * 257 szSystemStatus As String * 129 iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As Long End Type Private Const GWL_WNDPROC As Long = (-4) Public Function Form_Gethw(ObjectHost As Object) Dim StartupData As WSADataType Set m_ObjectHost = ObjectHost If Not WSAStartup(&H101, StartupData) Then bIsInit = True hWin = CreateWindowEx(0&, "STATIC", "SOCKET_WINDOW", 0&, 0&, 0&, 0&, 0&, 0&, 0&, App.hInstance, ByVal 0&) PrevProc = SetWindowLong(hWin, GWL_WNDPROC, AddressOf Socket_Evento) Else bIsInit = False End If End Function Public Function WsConnect(ByVal Host As String, ByVal Port As Long) As Long Dim s As Long, Sockin As SOCKADDR Sockin.sin_family = 2 Sockin.sin_port = htons(Port) Sockin.sin_addr = inet_addr(Host$) s = Socket(2, 1, 6) If Connect(s, Sockin, 16) <> 0 Then MsgBox "error al conectar" Exit Function End If SocketHandle = s 'Call Enviar0("HOLA COMO ANDAS ANDAS LAURITA") End Function Public Function Enviar0(Data As String) Dim Temp0$, Data0() As Byte Select Case VarType(Data) Case 8209 Data0 = Data Case 8 Data0 = StrConv(Data, vbFromUnicode) Case Else Data0 = CStr(Data) Data0 = StrConv(Data, vbFromUnicode) End Select Len_Bytes_Enviados = Send(SocketHandle, Data0(0), Len(Data), 0) End Function Private Function Socket_Evento(ByVal hWnd As Long, ByVal uMsg As Long, ByVal SocketHandle As Long, ByVal Evento As Long) As Long Select Case Evento Case &H10& 'conectado Call m_ObjectHost.Scoket0_Conectado Case &H20& 'cerrado Call m_ObjectHost.Scoket0_Cerrado Case &H1& 'descarga Dim DataTemp As String, Ret As Long, rBuff As String Do rBuff = String(1024, 0) Ret = recv(SocketHandle, ByVal rBuff, Len(rBuff), 0) If Ret > 0 Then DataTemp = DataTemp + Left$(rBuff, Ret) Loop Until Ret <= 0 If LenB(DataTemp) > 0 Then Call m_ObjectHost.Scoket0_Descarga(DataTemp) End If End Select End Function Public Sub terminate() DestroyWindow Called Call WSACleanup End Sub