wanderlei Cardoso Posted July 11, 2013 Report Share Posted July 11, 2013 Olá Pessoal, estou precisando criar um servidor socket para conexão de duas ou mais lojas para envio e recebimento de solicitações, eu estou usando a classe do TSocket e os exemplos do sockserv e client está funcionando parcialmente mas se o servidor não estiver rodando o client fica travado. como posso resolver isso? Quote Link to comment Share on other sites More sharing options...
alex2002 Posted July 12, 2013 Report Share Posted July 12, 2013 Olá Wanderlei. Cara, vc tem que aguardar um tempo e analisar. Vou postar parte de um programa meu que faz comunicação com o Banco do Brasil e dai vc estuda e veja se te atende. ////////////////////////////DADOS DA FUNCAO//////////////////////////////////////////// // NOME : ComunicaGcb // // FINALIDADE : Comunicar com o Correspondente bancário // // PARAMETROS : cMensEnv -- Mensagem a Enviar // // cMensRec -- Mensagem a Receber // // cTipoOperacao -- Tipo de Operação (P, I, C) // // cTipoDoc -- 1 = TÃtulo 2 = Convenio // // // /////////////////////////////////////////////////////////////////////////////////////// Static function ComunicaGcb( cMensEnv, cMensRec, cTipoOperacao, cTipoDoc ) local i local lRetorno := .t. cMensRec := space(1200) // Tentando abrir o canal de comunicação for i = 1 to 3 if oSocket = NIL .or. valtype( oSocket ) = 'U' if i > 1 syswait(.5) endif oSocket := OpenSocket( ) endif next if oSocket <> NIL // Enviando if envio( cMensEnv ) // Recebendo resposta if cTipoOperacao <> 'CC' syswait(.5) lRetorno := receber( @cMensRec, cTipoOperacao, cTipoDoc) endif else lRetorno := .f. endif sysrefresh() // InetClose( oSocket ) else lRetorno := .f. endif // InetCleanUp() sysrefresh() return lRetorno ///////////////////////////// Static Function OpenSocket() local lSocket := .f. local nVezes := 0 // Abrir Socket do while !lSocket .and. nVezes <= 3 InetInit() oSocket := InetConnectIP( cIPCOBAN, val(cPortaCOBAN) ) sysrefresh() if InetErrorCode(oSocket) <> 0 // Aconteceu algum erro InetDestroy( oSocket ) oSocket := NIL nVezes ++ lSocket := .f. else lSocket := .t. exit endif sysrefresh() enddo sysrefresh() return oSocket ///////////////////////////////////////// Static Function envio( cMensEnv ) local lEnvio := .f. local nVezes := 1 local nLenMensEnv := 0 do while !lEnvio .and. nVezes < 10 nVezes ++ nLenMensEnv := InetSendAll(oSocket, cMensEnv) if nLenMensEnv = len(cMensEnv) .and. nLenMensEnv <> 0 //envio ok lEnvio := .t. exit endif // Tentando abrir nova conexão Socket InetClose(oSocket) InetCleanUp() syswait(.5) sysrefresh() oSocket := NIL oSocket := openSocket() SysRefresh() // enddo Sysrefresh() return lEnvio ///////////////////////////////////////////////////////////////////// Static Function receber( cMensRec, cTipoOperacao, cTipoDoc) local cAutChave, cHeader := space(101) local lReceber := .f. local lRetorno := .t. local nLenMensRec := 0 local nDadosLido := 0 local nTentativas := 1 // Tentando receber 3 vezes do while !lReceber .and. nTentativas <= 3 nDadosLido := InetDataReady( oSocket, 10000) sysrefresh() nTentativas ++ if nDadosLido <> 1 loop endif syswait(.5) cHeader := space(101) // Se retornar 1 é que obteve sucesso na comunicação com o GCB if nDadosLido = 1 // Receber os Dados do HEADER InetRecvALL ( oSocket, @cHeader,101) sysrefresh() // Consulta de Pendencias if cTipoOperacao == 'XP' .and. len(cHeader) = 101 nLenMensRec := val( right( cHeader, 9 ) ) cMensRec := space( nLenMensRec ) if nLenMensRec > 0 InetRecvALL( oSocket, @cMensRec, nLenMensRec ) endif if substr(cHeader,69,4) <> '1100' .or. nLenMensRec <> len( cMensRec ) // Erro Transmissão lRetorno := .f. lReceber := .t. else lRetorno := .t. lReceber := .t. endif loop endif // Verificar se houve erro na transação if substr(cHeader,69,4) = '0000' .and. len(cHeader) = 101 // Sem problemas na comunicação nLenMensRec := val( right( cHeader, 9 ) ) cMensRec := space( nLenMensRec ) if nLenMensRec > 0 InetRecvALL( oSocket, @cMensRec, nLenMensRec ) endif if nLenMensRec <> len( cMensRec ) // Erro Transmissão lRetorno := .f. cMensRec := cHeader elseif cTipoOperacao == 'P' .and. val( substr(cHeader,57,4) ) > 0 // Ok cMensRec := cHeader + rtrim(cMensRec) elseif nLenMensRec = len( cMensRec ) // Ok (Consulta ou Confirmação) cMensRec := cHeader + rtrim(cMensRec) else // Erro eventual lRetorno := .f. cMensRec := rtrim(cMensRec) endif elseif len(cHeader) <> 101 lRetorno := .f. cMensRec := cHeader else nLenMensRec := val( right( cHeader, 9 ) ) cMensRec := space( nLenMensRec ) if nLenMensRec > 0 InetRecvALL( oSocket, @cMensRec, nLenMensRec ) endif lRetorno := .f. cMensRec := rtrim(cMensRec) endif sysrefresh() lreceber := .t. endif enddo if !lReceber lRetorno := .f. endif return lRetorno ////////////////////////////////////////////////////////////////////// Acho que com isso, vc consiga resolver o seu problema. Um abraço, Alexandre Pereira Quote Link to comment Share on other sites More sharing options...
Theotokos Posted July 13, 2013 Report Share Posted July 13, 2013 Desculpa ai, mas ou totalmente ignorante neste papo, mas estou curioso em saber o que é isso, para que serve, e exemplo de como em que usar... se alguem puder me responder ou passar alguma referencia, já meu muito obgdão!!!! Quote Link to comment Share on other sites More sharing options...
wanderlei Cardoso Posted July 13, 2013 Author Report Share Posted July 13, 2013 Olá Theotokos, o socket serve para conectar um ou mais micros como fazemos na conexão com http, só que eu estou criando para fazer um servidor na loja central que irá receber varias solicitações e processar e devolver uma consulta de produtos ou relatórios gerados, eu peguei os exemplos da pasta da Fivewin o sockcki.prg e o sockserv.prg. Alex valeu pela atenção, consegui fazer funcionar bem, deste modelo que vc me passou eu já usava com a lib wvw mas agora estou fazendos com a Fivewin e estou usando a classe do tsocket e não estava funcionando quando o servidor ficava fora do ar, agora consegui resolver colocando para testar o IP do servidor antes de enviar ou de receber para não ficar mais travado esperando resposta do servidor. Theotokos 1 Quote Link to comment Share on other sites More sharing options...
syspel Posted May 7, 2021 Report Share Posted May 7, 2021 ola vande eu preciso deste socketes para rodar com xharbour oque vc fez com harbour ? qual a lib que vc usou ailton ailtonsather@gmail.com obrigado Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.