Ir para conteúdo
Fórum Script Brasil
  • 0

PYTHON TCP/UDP


matheusmdutra

Pergunta

Sou novato na linguagem Python, e este é um codigo de um servidor em TCP. Gostaria de saber como modifica-lo para UDP. Alguma dica?
O objetivo controlar o arduino através de uma rede local. Eu controlo, através de um desktop (clente), o Arduino que está conectado a um notebook (servidor). Este cliente, envia os comandos para o programa servidor, o servidor recebe esse comandos e os envia para o Arduino pela porta serial. Assim, é possível controlar o Arduino de qualquer lugar, só é necessário que os dois computadores fassam parte da mesma rede. No meu caso, eu tenho uma rede wirelles
Obrigado




import socket
import thread
import os
import serial
HOST = ''
PORTA = 7000
PORTA_SERIAL = '/dev/ttyUSB1'
BAUD_RATE = 9600
conSerial = serial.Serial(PORTA_SERIAL, BAUD_RATE)
os.system("clear")
def conecta(conexao, cliente):
print "IP conectado | Porta", cliente
while True:
dados = conexao.recv(1024)
if not dados: break
print "Cliente para Arduino: ", dados
conSerial.write(dados)
mensagem = conSerial.readline()
print "Arduino Diz: ", mensagem
print 'Cliente encerrou conexao', cliente
print "Terminando..."
conSerial.close()
conexao.close()
thread.exit()
sys.exit()
tcpSOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conexaoORIGEM = (HOST, PORTA)
tcpSOCKET.bind(conexaoORIGEM)
tcpSOCKET.listen(1)
while True:
conexao, cliente = tcpSOCKET.accept()
thread.start_new_thread(conecta, tuple([conexao, cliente]))
tcpSOCKET.close()

Editado por matheusmdutra
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Fiz o código abaixo sem testar (não estou com Python aqui no momento), então pode ter alguma coisa errada:
import socket
import thread
import os
import serial


HOST = ''
PORTA = 7000
PORTA_SERIAL = '/dev/ttyUSB1'
BAUD_RATE = 9600


conSerial = serial.Serial(PORTA_SERIAL, BAUD_RATE)
os.system("clear")


def conecta(conexao, cliente):
    print "IP conectado | Porta",   cliente


    while True:
        dados, endereco = conexao.recvfrom(1024)
        if dados:
            print "Cliente para Arduino: ", dados
            conSerial.write(dados)
            mensagem = conSerial.readline()
            print "Arduino Diz: ", mensagem


udpSOCKET = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
conexaoORIGEM = (HOST, PORTA)
udpSOCKET.bind(conexaoORIGEM)


while True:
    thread.start_new_thread(conecta, tuple([udpSOCKET, conexaoORIGEM]))


udpSOCKET.close()
Repare que, no caso do UDP, não existe o lance de "esperar" a conexão e depois ficar "conectado", então tirei toda a parte que encerra a conexão e sai do programa, uma vez que é necessário ficar lendo (esperando) os dados chegarem e não dá pra ter uma noção de quando isso vai acabar (como ocorre com o TCP). Se a possibilidade de perder dados for crítica, recomendo continuar com o TCP, mas se não tiver nenhum problema em perder um pacote ou outro (ou os dados chegarem incompletos) veja se o UDP vai realmente te servir.
Bem legal essa idéia de se comunicar com o Arduino, no caso de você não possuir um ethernet/wifi/bluetooth shield/módulo.
Abraços!
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...