title: Python Socket How to get a continuous stream of data with recv in a thread?
body: <p>So I'm trying to write a program that gets a continuous stream of data from a server, in a thread. The data being sent from the server is always very short, but does range in length</p>
  
  <p>I'm currently trying to use the recv function in the socket library to constantly receive data, but for some reason I'm not getting anything at all. I know a common problem with the recv function is that it sometimes splits up the data, but for me it's not receiving anything. I know that the problem doesn't come from the server, because when the client connects it does receive confirmation from the server. Is this because I'm trying to do this in a different thread?</p>
  
  <p>This is the socket part of my code:</p>
  
  <pre><code>client = socket(AF_INET, SOCK_STREAM)
  
  def connectToServer(host, port):
      global client
      try:
          client.connect((host, port))
          connectionResult = client.recv(2048).decode()
          if connectionResult == 'succesfull connection':
              return connectionResult
          else:
              return 'connection failed'
  
      except:
          return 'connection failed'
  
  # This function is ran in a thread (from another module)
  def getUpdatesFromServer(updateQueue):
      global client
      while True:
          receivedUpdate = client.recv(10000).decode()
          if receivedUpdate == 'server went down':
              updateQueue.put('server went down')
  </code></pre>
  
  <p>And this is the code that starts the Thread:</p>
  
  <pre><code>getUpdatesFromServerThread = Thread(target=ServerConnect.getUpdatesFromServer, args=(GameState.screenUpdateQueue,))
  getUpdatesFromServerThread.daemon = True
  getUpdatesFromServerThread.start()
  </code></pre>
  
  <p>The connectToServer function is called here (the first thing that happens when the client is ran):</p>
  
  <pre><code>connectionOutcome = ServerConnect.connectToServer(host, port)
  if connectionOutcome == 'succesfull connection':
      startGame()
  else:
      print('\n\nFailed to connect to the server. Please check your internet connection. If your internet connection is okay, it probably means the server is down and you should wait for a while.\n\n')
  </code></pre>
  
  <p>And here is the startGame function:</p>
  
  <pre><code>def startGame():
      print('You have been succesfully connected to the server.')
      getUpdatesFromServerThread = Thread(target=ServerConnect.getUpdatesFromServer, args=(GameState.screenUpdateQueue,))
      getUpdatesFromServerThread.daemon = True
      getUpdatesFromServerThread.start()
      screenUpdateThread = Thread(target=doScreenUpdates)
      screenUpdateThread.daemon = True
      screenUpdateThread.start()
      sleep(1)
      MainGameScreen.main()
      # When the eventloop stops, this is ran and sends a disconnect signal to the server, which closes the connection (which does work)
      sleep(0.5)
      ServerConnect.sendCommandToServer('disconnect')
  </code></pre>
  
  <p>Thank you in advance!</p>
  
  <p>Edit: I've found the problem. I thought the server was sending data, but in fact it wasn't, it just didn't give any error message, so I assumed that was working.</p>