0

first of all i want to clarify. I don't have any deep knowledge on python, but im trying to learn while doing a project for college so lets start and thanks for your time.

I'm working with Python 3.4 on Windows 10 for the hosts and Ubuntu in an Odroid as a server.

The problem on my code is that i need to send a code like 0001 to a set of hosts of which i have their ips but when i try to close the socket it won't do it and i can't open a new one to send the code to the next host.

Client code :

[yes, it's a socket server code but when i try to connect multiple clients to one server, the code stopped on listening new connections and i couldn't "fix" it in another way]

while 1:
TCP_PORT = 5000
BUFFER_SIZE = 4  # Normally 1024, but we want fast response
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', TCP_PORT))
s.listen(1)
s, addr = s.accept()



data = s.recv(BUFFER_SIZE)

if not data:
    break

if data.decode('ascii') == '0001':
    print (data.decode('ascii'))
    s.shutdown(socket.SHUT_RDWR)
    s.close()

Server side code:

    import serial
    import time
    import mysql.connector
    import shutil
    import socket
    import sys
    import _thread

    joined_seq = '0001'
    Alerta = True
    TotalClientes = True


    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  

    seq = []
    UltimaIPextraida = ''
    port = 5000


while Alerta == True:

    if TotalClientes == True:
        cnx2 = mysql.connector.connect(connection parameters removed)
        cursor2 = cnx2.cursor()
        cursor2.execute("SELECT MAX(Entrada) FROM Host")

        for (Entrada) in cursor2:
           NoTupla = ''.join(str(v) for v in Entrada)
           ValorMAX = int(NoTupla)

        cursor2.close()
        cnx2.close()
        TotalClientes = False


    if ValorMAX > 0:
        print('Host Numero', ValorMAX)
        cnx3 = mysql.connector.connect(connection parameters removed)
        cursor3 = cnx3.cursor()
        query = ("SELECT IP FROM Host WHERE entrada = '%s' " % (ValorMAX))
        cursor3.execute(query)

        for (IP) in cursor3:
            IPextraida = ''.join(str(v) for v in IP)

        cursor3.close()
        cnx3.close()

        #if ValorMAX == 1:  #DESCOMENTAR
        #   Alerta = False   #DESCOMENTAR

        ValorMAX = ValorMAX -1
        print('IP Extraida = ' + IPextraida)
        print('Ultima IP Extraida = '+ UltimaIPextraida)


        if UltimaIPextraida == IPextraida:
            print('Ultima IP extraida es identica a la nueva ip extraida, pasando a la siguiente')



        elif UltimaIPextraida != IPextraida:

            try:
                s.connect((IPextraida, port))
                s.send(joined_seq.encode('ascii'))
                s.shutdown(s.SHUT_RDWR)
                s.close()
                print('Mensaje enviado correctamente = ' + joined_seq)


            except:
                 print('No se pudo conectar con host')



         UltimaIPextraida = IPextraida

** some code was ommited because it has no relevance **

With the mysql query i get the total of ip entries on the table and then with that i get all ip one by one to make the socket connection.

I really hope someone can help me to solve this problem... i've been 2 days trying and i'm running out of time to finish the code and it isn't the main part of the project, i only need a functional code to show some capabilities of the arduino functions graphically.

thank you all for your time and sorry for the gramatical errors and the code in spanish :(

0

1 Answer 1

1

Solved with this:

def enviaMensaje(ipdelwn):
    enviado=False
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  
    try:
        s.connect((ipdelwn, port))
        s.send(joined_seq.encode('ascii'))
        s.close()
        print('Mensaje enviado correctamente = ' + joined_seq)
        enviado=True
   except:
        print('No se pudo conectar con host')
   return enviado
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.