socket.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import socket
  2. import threading
  3. import config as cfg
  4. LenFunc = cfg.LenFunc
  5. class SocketHTTP(threading.Thread):
  6. def __init__(self, HOST,PORT, parent):
  7. try:
  8. self.parent = parent
  9. super(SocketHTTP,self).__init__(None,None,None,None)
  10. self.port = PORT
  11. self.Host = HOST
  12. self.history = []
  13. self.socket = socket.socket()
  14. self.socket.connect((HOST, PORT))
  15. t = threading.Thread(target=self.receive)
  16. t.start()
  17. print("socket is created and Listener is created\n",(HOST, PORT))
  18. except:
  19. print("\33[41m\33[41mAn exception occurred SocketHTTP\33[0m" )
  20. def send(self,M):
  21. try:
  22. self.socket.sendall(M)
  23. self.history.append(("send",M))
  24. print("\033[91m\n\t Send -> ",M,"\n\033[0m")
  25. except:
  26. print("\33[41m\33[41mAn exception occurred SocketHTTP send\33[0m" )
  27. def receive(self):
  28. try:
  29. while True:
  30. data = self.socket.recv(65565)
  31. # print("data",data)
  32. if bytes.hex(data) == "":
  33. continue
  34. self.parent.recv(bytes.hex(data))
  35. except NameError:
  36. print("\33[41m\33[41mAn exception occurred SocketHTTP receiv e NameError\33[0m",NameError )
  37. class SocketClient(threading.Thread):
  38. def __init__(self, HOST,PORT, parser,id):
  39. try:
  40. self.parser = parser
  41. super(SocketClient,self).__init__(None,None,None,None)
  42. self.port = PORT
  43. self.Host = HOST
  44. self.history = []
  45. self.id = id
  46. self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  47. self.socket.connect((HOST, PORT))
  48. t = threading.Thread(target=self.receive)
  49. t.start()
  50. print("socket is created and Listener is created\n")
  51. except:
  52. print("\33[41m\33[41mAn exception occurred SocketClient\33[0m" )
  53. def send(self,M):
  54. try:
  55. Message=bytes(M,'utf-8')
  56. self.socket.sendall(Message)
  57. self.history.append(("send",Message))
  58. print("\033[91m\n\t Send -> ",M,"\n\033[0m")
  59. except:
  60. print("\33[41m\33[41mAn exception occurred socket Client send\33[0m" )
  61. def receive(self):
  62. try:
  63. while True:
  64. len = self.socket.recv(cfg.LenFunc)
  65. if not len:
  66. break
  67. data = self.socket.recv(int(len.decode("utf-8")))
  68. data = self.parser.toJSON(data.decode("utf-8"))
  69. print("\033[94m\n\t receive -> ",data,"\n\033[0m")
  70. self.parser.parser(data,None,self)
  71. except:
  72. print("\33[41m\33[41mAn exception occurred socket Client receive\33[0m" )
  73. class SocketServer():
  74. def __init__(self, socketPort, parser,id):
  75. try:
  76. self.parser = parser
  77. self.history = []
  78. self.connected = []
  79. self.socketPort = socketPort
  80. self.id = id
  81. t = threading.Thread(target=self.connection)
  82. t.start()
  83. print("socket is created and Listener is created",socketPort)
  84. except:
  85. print("\33[41m\33[41mAn exception occurred SocketServer\33[0m" )
  86. def connection(self):
  87. try:
  88. with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  89. s.bind(("localhost", self.socketPort))
  90. s.listen()
  91. self.socket = s
  92. while True:
  93. conn, addr = self.socket.accept()
  94. print("user connected to ",conn, "-> ",addr)
  95. u = Connection(conn, addr,self.socketPort+1,self.parser)# TODO socketprot dynamic
  96. self.connected.append(u)
  97. print(self.connected)
  98. except Exception as exception:
  99. print("\33[41m\33[41mAn exception occurred SocketServer connection ",exception,"\33[0m" )
  100. class Connection():
  101. def __init__(self,connection,address,oracleSocketPort, parser):
  102. try:
  103. self.parser = parser
  104. self.socket = connection
  105. self.addr = address
  106. self.history = []
  107. self.type = None
  108. # self.id = os.urandom(32)
  109. self.oracleSocketPort = oracleSocketPort
  110. t = threading.Thread(target=self.receive)
  111. t.start()
  112. # self.send("Connection")
  113. except:
  114. print("\33[41m\33[41mAn exception occurred Connection connection\33[0m" )
  115. def send(self,M):
  116. try:
  117. Message=bytes(M,'utf-8')
  118. self.socket.sendall(Message)
  119. self.history.append(("send",Message))
  120. print("\033[91m\n\t Send -> ",M,"\n\033[0m")
  121. except:
  122. print("\33[41m\33[41mAn exception occurred Connection sebd\33[0m" )
  123. def receive(self):
  124. try:
  125. while True:
  126. len = self.socket.recv(cfg.LenFunc)
  127. if not len:
  128. break
  129. print(int(len.decode("utf-8")))
  130. data = self.socket.recv(int(len.decode("utf-8")))
  131. data = self.parser.toJSON(data.decode("utf-8"))
  132. print("\033[94m\n\t receive -> ",data,"\n\033[0m")
  133. self.parser.parser(data,None,self)
  134. except :
  135. print("\33[41m\33[41mAn exception occurred Connection receive\33[0m" )