alguien puede mostrar un ejemplo del uso del WINSOCK??

Post Reply
Elias Torres
Posts: 233
Joined: Wed Aug 09, 2006 3:07 pm

alguien puede mostrar un ejemplo del uso del WINSOCK??

Post by Elias Torres »

Hola a todos, pues eso necesitaria para guiarme un ejemplillo para el uso del winsock..... Si alguien puede pasarme uno o decirme donde puedo mirar se lo agradeceria mucho.

Un saludo.

Elías Torres.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Elías,

Estos son ejemplos de FWH:
sockcli.prg

Code: Select all

// Socket server connection sample

#include "FiveWin.ch"

static oWnd, oSocket

function Main()

   local oBar

   DEFINE WINDOW oWnd TITLE "Client socket"

   DEFINE BUTTONBAR oBar OF oWnd _3D

   DEFINE BUTTON OF oBar ACTION Client() TOOLTIP "Connect"

   DEFINE BUTTON OF oBar ;
      ACTION oSocket:SendData( "MSG This is a test" ) ;
      TOOLTIP "Send data"

   DEFINE BUTTON OF oBar ;
      ACTION SendFile() TOOLTIP "Send file"

   ACTIVATE WINDOW oWnd

return nil

function Client()

   oSocket = TSocket():New( 2000 )

   oSocket:bRead    = { | oSocket | MsgInfo( oSocket:GetData() ) }

   // Never use a MsgInfo() here because it hangs Windows!!!

   oSocket:bConnect = { || oWnd:SetText( "Connected!" ) }

   oSocket:bClose   = { || MsgInfo( "Server has closed!" ) }

   oSocket:Connect( "127.0.0.1" ) // use the server IP address here

return nil

function SendFile()

   local cFileName := cGetFile( "*.*", "Select a file to send by Internet" )

   if ! Empty( cFileName ) .and. File( cFileName )

      oSocket:SendData( "SENDFILE " + cFileName( cFileName ) )
      oSocket:SendFile( cFileName )
      oSocket:End()
      MsgInfo( "File sent" )
   endif

return nil
sockserv.prg

Code: Select all

// Socket server connection sample



#include "FiveWin.ch"



#define ST_COMMAND  1

#define ST_SENDFILE 2

#define FILE_BLOCK 8000



static oWnd, oSocket, oClient



//------------------------------------------------------------------------//



function Main()



   local oBar



   DEFINE WINDOW oWnd TITLE "Server socket"



   DEFINE BUTTONBAR oBar OF oWnd _3D



   DEFINE BUTTON OF oBar ACTION Server() TOOLTIP "Listen"



   ACTIVATE WINDOW oWnd



return nil



//------------------------------------------------------------------------//



function Server()



   oSocket = TSocket():New( 2000 )



   oSocket:bAccept = { | oSocket | oClient := TSocket():Accept( oSocket:nSocket ),;

                       oClient:Cargo := ST_COMMAND,;

                       oClient:bRead := { | oSocket | OnRead( oSocket ) },;

                       oClient:bClose := { | oSocket | OnClose( oSocket ) } }



   oSocket:Listen()



return nil



//------------------------------------------------------------------------//



function OnRead( oSocket )



   local cData := oSocket:GetData()

   local cToken



   LogFile( "sockserv.txt", { Len( cData ), cData } )



   do case

      case oSocket:Cargo == ST_COMMAND

           cToken = StrToken( cData, 1 )

           do case

              case cToken == "SENDFILE"

                   oSocket:Cargo = ST_SENDFILE

                   oSocket:hFile = fcreate( StrToken( cData, 2 ) )



              case cToken == "MSG"

                   MsgInfo( SubStr( cData, 5 ) )

           endcase



      case oSocket:Cargo == ST_SENDFILE

           fwrite( oSocket:hFile, cData, Len( cData ) )

           LogFile( "sockserv.txt", { "writting..." } )



           if Len( cData ) < FILE_BLOCK

              // fclose( oSocket:hFile )

              // MsgInfo( Len( cData ) )

              // oSocket:Cargo = ST_COMMAND

           endif

   endcase



return nil



//------------------------------------------------------------------------//



function OnClose( oSocket )



   MsgInfo( "Client has closed!" )



   do case

      case oSocket:Cargo == ST_SENDFILE

           fclose( oSocket:hFile )

   endcase



   oSocket:End()



return nil



//------------------------------------------------------------------------//
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply