# -*- coding: utf-8 -*- import select import socket import threading import time class client(threading.Thread): def __init__(self, host, port, timeout = 1): self.__connected = False self.__sock = None self.__exceptional = [] self.__readable = [] self.__writable = [] self.__host = host self.__port = port self.__timeout = timeout threading.Thread.__init__(self) def __close(self): try: self.__sock.shutdown(1) self.__sock.close() return True except: return False def __create(self): self.__sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # self.__sock.setblocking(1) def connected(self): return self.__connected def run(self): #if self.__connected: # return print("Creating socket ...") self.__create() while True: try: if ((self.__readable == []) and (self.__writable == []) and (self.__exceptional == [])): print("Connecting to: %s:%s ..." % (self.__host, self.__port)) if (self.__sock.connect_ex((self.__host, self.__port)) == 0): self.__connected = True print("Connected!") try: self.__readable, self.__writable, self.__exceptional = select.select([self.__sock,], [self.__sock,], [], self.__timeout) except Exception as e: print(e) if (self.__readable != []): self.__connected = False self.__close() print("Recreating socket #1 ...") self.__create() elif (self.__writable != []): self.__connected = True except Exception as e: print(e) time.sleep(1) def send(self, msg): try: if (self.__connected): self.__sock.sendall(msg) # totalsent = 0 # while totalsent < len(msg): # sent = self.__sock.send(msg[totalsent:]) # if sent == 0: # self.__connected = False # raise # totalsent = totalsent + sent return True except: self.__close() self.__create() return False def main(): v = ["self", "test"] cli = client("127.0.0.1", 10001) cli.start() while True: if (cli.connected()): for i in v: if (cli.send(i)): print("Sent: %s" % (i)) time.sleep(0.1) time.sleep(0.1) cli.join() if __name__ == "__main__": main()