Ir para conteúdo
Fórum Script Brasil

sidneivl

Membros
  • Total de itens

    5
  • Registro em

  • Última visita

Sobre sidneivl

sidneivl's Achievements

0

Reputação

  1. Fala pessoas, Estou aqui de novo, meu projeto está 70% pronto (pra quem acompanhou o tópico socket como interagir). Agora estou testando e arrumando os detalhes mas reparei um erro bem esquisito, mando essa xml: <n><u>1</u><l>1,0,0,0,0</l><v>0.05</v><a>1</a></n> quando envio ela 161 vezes para o socket na última vez antes de dar o erro o socket só recebe: <n><u>1</u><l>1,0,0,0,0</l><v>0 e toda vez é a mesma coisa ai pensei que fosse a parte do meu código que diz con.recv(1024) mas mudei ele para con.recv(4096) que sria 4x isso e nada, na mesma vez (161) ele só recebe <n><u>1</u><l>1,0,0,0,0</l><v>0 Será que o socket vai armazenando os dados que vai chegando os dados em bufer? tem como ir limpando isso? não existe a função flush para socket, o que posso fazer? Obrigado desde já....
  2. Sim, chega todo o xml, até que se eu enviar por um cliente em python o xml chega igual e funciona normalmente, mas o flash deve enviar alguma coisa que o socket não reconhece..... BOM GALERA, ENFIM RESOLVI ESSE GRANDE DESAFIO GRAÇA A AJUDA DE PESSOAS AQUI DO FORUM E DE AMIGOS PROGRAMADORES, MUITO OBRIGADO VAMOS AS SOLUÇÕES.... PRIMEIRO O CÓDIGO: import socket import thread from twisted.web import microdom HOST = '' # Endereco IP do Servidor PORT = 5000 # Porta que o Servidor esta tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) orig = (HOST, PORT) tcp.bind(orig) tcp.listen(999) def conectado(con, cliente): print 'Conectado por', cliente while True: msg = con.recv(1024) x = microdom.parseString(msg) nos = x.documentElement varChegou = nos.childNodes[0].childNodes[0].data print 'dataNo: ' + varChegou if varChegou == "ok": msgEnvia = "<teste>" msgEnvia += "<noh>Teste01</noh>" msgEnvia += "</teste>" con.send(msgEnvia + '\') print 'ok' else: msgEnvia = "<teste>" msgEnvia += "<noh>Teste02</noh>" msgEnvia += "</teste>" con.send(msgEnvia + '\') print 'nada ok' print 'Finalizando conexao do cliente', cliente con.close() thread.exit() while True: con, cliente = tcp.accept() thread.start_new_thread(conectado, tuple([con, cliente])) tcp.close() [/codebox] Bom se você leu todo esse tópico você vai entender o c;odigo acima, meu último problema foi resolvido com um modulo do script twisted para python, que você pode encontrar o download e documentação em: http://twistedmatrix.com/trac/ Parece que o xml parse nativo do python tem alguma coisa que não faz receber o xml corretamente do flash, e incrivelmente se você dá print nos nós que chega do xml estão todos lá, mas no parse ele não funciona falando que a formatação está ruim mesmo estando certa. Então utilizando o oarse do twisted tudo funcionou normalmente. Ainda vou fazer um tuto melhor para colocar aqui no forum, dúvidas e novidades colocarei aqui, QUALQUER COISA SÓ ENTRAR EM CONTATO... Até o próximo desafio....
  3. Tive um grande avanço esses dias com o estudo de integração de socket python com o flash graças a ajuda do Graymalkin aqui do fórum e um amigo meu (Daniel Dalben) que também programa, além dos cookbooks do pythonbrasil.com.br. Vamos ao novo código: import socket #importa a classe socket import thread #importa a classe thread import xml.dom.minidom #importa a classe minidom HOST = '' # Endereco IP do Servidor PORT = 5000 # Porta que o Servidor esta tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #cria o socket orig = (HOST, PORT) tcp.bind(orig) #abre o socket no ip e porta tcp.listen(999) #quantos ouvintes o socket vai ter #função quando alguém estiver conectado através da abertura de uma thread def conectado(con, cliente): print 'Conectado por', cliente #fica em loooping recebendo as entradas da thread while True: msg = con.recv(1024) #recebe a mensagem do cliente x = xml.dom.minidom.parseString(msg) #pega o xml de uma string nos = x.documentElement #pega o xml como um document varChegou = nos.childNodes[0].data #pego o valor contido no primeiro nó print 'dataNo: ' + varChegou #trato o resultado do nó, escrevo um xml e reenvio para o cliente if varChegou == "ok": msgEnvia = "<teste>" msgEnvia += "<noh>Teste01</noh>" msgEnvia += "</teste>" con.send(msgEnvia + '\ 0') print 'ok' else: msgEnvia = "<teste>" msgEnvia += "<noh>Teste02</noh>" msgEnvia += "</teste>" con.send(msgEnvia + '\ 0') print 'nada ok' print 'Finalizando conexao do cliente', cliente con.close() thread.exit() #looping para ficar recebendo as conexões while True: con, cliente = tcp.accept() #aceita a conexão e pega os dados do cliente thread.start_new_thread(conectado, tuple([con, cliente])) #inicia uma nova thread tcp.close() [/codebox] NOTEM - no final da string que vai ser enviada existe um isso foi uma dica preciosa de Daniel Dalben, que me explicou que no final da string é necessário um bit 0, onde outras linguagens como c, java entre outras recebem o string sem problemas, mas o flash não, então com o a msg chega tranquilamente no flash e pode ser tratada, mas tenho um grande problema: PROBLEMA: Quando recebo a string vinda de um cliente python tudo acontece, mas quando recebo a string vinda do flash nada acontece e dá erro (Unhandled exception in thread started by <function conectado at 0x018D0E30>) dando um print type(msg) o python me retorna 'str', ai vem a pergunta, se ambos vem str porque quando a string (que é um xml) vem do flash não é reconhecido como tal??? Tem alguma forma de transformar essa string em uma string válida para o xml.dom.minidom.parseString??? já tentei dar str() mas nada, e o não funciona nesse caso.... Alguém tem uma luz?
  4. Fala Graymalkin, Seus comentários me ajudaram... No seu tópiuco vou dar uma lida com mais calma... Consegui fazer um script em python que mandasse uma mensgaem e dependendo da mensagem o socket respode alguma coisa... :D Mas meu desafio é fazer a comunicação entre python e flash e já tive um excelente resultado, consigo enviar a mensagem do flash para o python tranquilamente utilizando o xmlsocket, que é a unica forma fácil de fazer o flash se conectar com um socket. Mas não consigo recuperar o que o socket manda via send, no flash tenho uma função onData que seria o que fica esperando a resposta do socket, mas nada acontece, talvez eu tenha que retornar um xml, vou estudar melhor isso... Agora tenho um problema aqui, quando mando uma msg do flash vejo no python que chega tranquilamente, mas se eu mando outra msg do flash o serviço que segura meu socket cai e o software que estou usando pra rodar ele trava....o que pode ser? não recebo nenhuma exception.... Para rodar um arquivo python vi que precisa ter um negócio na primeira linha como: #! usr/bin/python Que eu acho que seria o caminho do interpretador no linux, no windows seria: #! c:\python24\ ou não precisa disso? Vamos caminhando, daqui alguns dias teremos um ótimo conteúdo de pesquisa aqui ;)
  5. Fala pessoal, Sou iniciante em programação python, hoje atualmente sou programador action script, php, postgre e mysql. Também conheço asp e mssql. Como trabalho com web sempre ouvi falar de python e agora me interessei, já que preciso desenvolver uma aplicação flash onde me comunico com o servidor que faz a comunicação de usuários. Foi assim que cheguei ao python. A parte de linguagem já fiz o que precisava para ter meu inicio no meu pequeno projeto, toda a sintaxe que necessito já utilizei sem maiores problemas, mas o que estou me complicando todo e na parte onde tenho que fazer os usuários se comunicarem pela interface flash. Então pesquisei a parte de socket no python e estou quebrando muito minha cabeça, pareço mais um surdo em um quarto escuro :blink: Então recorri a vocês. Já li vários tutoriais e documentações, mas se tratando de socket, que é algo mais avançado na linguagem, me sinto extremamente perdido. Hoje o que tenho é o seguinte: import socket HOST = '' # Endereco IP do Servidor PORT = 5000 # Porta que o Servidor esta tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) orig = (HOST, PORT) tcp.bind(orig) tcp.listen(1) while True: con, cliente = tcp.accept() print 'Concetado por', cliente while True: msg = con.recv(1024) if not msg: break print cliente, msg print 'Finalizando conexao do cliente', cliente con.close() E pelo que entendi disso é o seguinte: - importo o módulo socket do python - defino porta e servidor - instancio a variavel tcp com o tipo de protocolo que estou usando para utilizar o socket - tenho a função bind que não entendi muito bem, mas acho que é a a criação do servidor - tenho a função listen que seria quantas conexões o socket vai aceitar - o while pelo que entendi seria um looping que o socket fica para ficar escutando a porta para receber as conexões - msg acho que é avariavel que o socket vai recever - faz a verificação se tem msg ou não - e por fim fecha o socket. Utilizei outro código para acessar esse socket mas nada aconteceu, verifiquei que quando rodo esse script eu instancio um serviço python no meu sistema que é um WINDOWS Agora vem as dúvidas: - Como faço para rodar esse serviço toda vez que meu computador ligar? - Como me conecto a esse socket? - Como recebo o retorno desse socket? Bom acho que isso é um começo, hehehehe Espero que alguém possa me ajudar.... Esse tópico poderia ser o inicio de um estudo sobre socket em pyhon, já que esse assunto é tão escaço na internet, ainda mais em portguês... PS.: Desculpem pelo post gigantesco :P
×
×
  • Criar Novo...