tcp_server.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!/usr/bin/env python3
  2. #
  3. # SPDX-License-Identifier: GPL-2.0
  4. #
  5. import sys, os, os.path, getopt
  6. import socket, time
  7. import subprocess
  8. import select
  9. def read(sock, n):
  10. buf = b''
  11. while len(buf) < n:
  12. rem = n - len(buf)
  13. try: s = sock.recv(rem)
  14. except (socket.error) as e: return b''
  15. buf += s
  16. return buf
  17. def send(sock, s):
  18. total = len(s)
  19. count = 0
  20. while count < total:
  21. try: n = sock.send(s)
  22. except (socket.error) as e: n = 0
  23. if n == 0:
  24. return count;
  25. count += n
  26. return count
  27. SERVER_PORT = 12877
  28. MAX_PORTS = 2
  29. serverPort = SERVER_PORT
  30. serverSocket = None
  31. HostName = socket.gethostname()
  32. # create passive socket
  33. serverSocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
  34. host = socket.gethostname()
  35. try: serverSocket.bind((host, 0))
  36. except socket.error as msg:
  37. print('bind fails: ' + str(msg))
  38. sn = serverSocket.getsockname()
  39. serverPort = sn[1]
  40. cmdStr = ("./tcp_client.py %d &") % (serverPort)
  41. os.system(cmdStr)
  42. buf = b''
  43. n = 0
  44. while n < 500:
  45. buf += b'.'
  46. n += 1
  47. serverSocket.listen(MAX_PORTS)
  48. readList = [serverSocket]
  49. while True:
  50. readyRead, readyWrite, inError = \
  51. select.select(readList, [], [], 2)
  52. if len(readyRead) > 0:
  53. waitCount = 0
  54. for sock in readyRead:
  55. if sock == serverSocket:
  56. (clientSocket, address) = serverSocket.accept()
  57. address = str(address[0])
  58. readList.append(clientSocket)
  59. else:
  60. sock.settimeout(1);
  61. s = read(sock, 1000)
  62. n = send(sock, buf)
  63. sock.close()
  64. serverSocket.close()
  65. sys.exit(0)
  66. else:
  67. print('Select timeout!')
  68. sys.exit(1)