server.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import socket
  2. import sys
  3. # save request code, make var for tcp socket port
  4. requestcode = sys.argv[1]
  5. rport = 0
  6. # start udp socket, declare tcp socket var
  7. sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  8. tsock = None
  9. # get udp socket port from system, save in a var
  10. sock.bind(('', 0))
  11. nport = sock.getsockname()[1]
  12. print("SERVER_PORT=", nport, sep="")
  13. # make flag to see if we are waiting for a confirmation or a new connection
  14. newConn = True
  15. # listen for msgs
  16. while True:
  17. message, clientAddress = sock.recvfrom(1024)
  18. message = message.decode()
  19. # match, create tcp socket
  20. if (message == requestcode and newConn):
  21. tsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  22. tsock.bind(('', 0))
  23. rport = tsock.getsockname()[1]
  24. print("SERVER_TCP_PORT=", rport, sep="")
  25. sock.sendto(str(rport).encode(), clientAddress) # send new socket port to client
  26. newConn = False
  27. tsock.listen(1)
  28. # now put logic for TCP socket behaviour
  29. while True:
  30. tempsock, addr = tsock.accept()
  31. msg = tempsock.recv(1024).decode()
  32. print("SERVER_RCV_MSG='", msg, "'", sep="")
  33. reply = msg[::-1]
  34. tempsock.send(reply.encode())
  35. tempsock.close()
  36. # match, send a confirmation msg
  37. elif (newConn == False and message == rport):
  38. sock.sendto("correct".encode(), clientAddress)
  39. # client screwed up something other than sending the wrong requestcode
  40. elif (newConn != False):
  41. newConn = True
  42. tsock.close()