out.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import socket
  2. import threading
  3. import json
  4. class TcpServer:
  5. def __init__(self):
  6. self.port=2233#设置端口
  7. self.HEAD_LEN=8
  8. self.tcpServerSocket=socket.socket()#创建socket对象
  9. hostname= socket.gethostname()#获取本地主机名
  10. sysinfo = socket.gethostbyname_ex(hostname)
  11. hostip=sysinfo[2][2]
  12. self.tcpServerSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)#让端口可以复用
  13. self.tcpServerSocket.bind((hostip,self.port))#将地址与套接字绑定,且套接字要求是从未被绑定过的
  14. self.tcpServerSocket.listen(5)#代办事件中排队等待connect的最大数目
  15. def set_receive_listener(self,receive_listener):
  16. self.receive_listener = receive_listener
  17. def server(self):
  18. while True:
  19. print("等待连接")
  20. self.clientSocket, addr = self.tcpServerSocket.accept()
  21. print ('连接地址:', addr)
  22. if self.connected_listener:
  23. self.connected_listener()
  24. while True:
  25. try:
  26. head_data=self.clientSocket.recv(self.HEAD_LEN)
  27. if not len(head_data)==8:
  28. print("bad package!head_data len:",head_data)
  29. self.restart()
  30. return
  31. body_len = self.get_length_from_head_data(head_data)
  32. body_data = self.clientSocket.recv(body_len)
  33. if not body_len==len(body_data):
  34. print("bad package!body_len:",body_len)
  35. self.restart()
  36. return
  37. data_type = self.get_type_from_head_data(head_data)
  38. if data_type == 1:#test/json data
  39. text = body_data.decode()
  40. print(text)
  41. if not text:
  42. break
  43. if self.receive_listene