by MGA » Mon Sep 22, 2008 8:19 pm
Sr. Antonio, é o que estou tentando dizer, o exemplo:
sockserv.prg
sockcli.prg
Funciona PERFEITAMENTE!!! (Neste exemplo consigo mandar algo do sockcli.prg(sendata 2º button) para o sockserv.prg) .
O que eu preciso é mandar do SOCKSERV.PRG para SOCKCLI.PRG!
SOCKSERV.PRG MSG("HELLO WORD") ==> SOCKCLI.PRG (E sockcli recebe a mensagem)
---
Sr. Antonio, não sei se o Sr me entendeu, eu quero mandar uma mensagem de origem (SOCKSERV) para o destino (SOCKCLI.PRG)!
Exemplo:
// 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"
DEFINE BUTTON OF oBar ACTION MSGCLI("Hello Word") TOOLTIP "msgforclient"
ACTIVATE WINDOW oWnd
return nil
//------------------------------------------------------------------------//
function msgcli(cMsg)
?? como mandar para determinado client???
oSocket:SendData( cMsg )
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