public function Receive ($reply = FALSE)
	{
		
		// Check the stream is connected
		
		if ($this->_stream === FALSE)
		{
			
			// If not create an error
			
			$this->Error ('Cannot receive data, the stream is not connected!');
			
			// return FALSE
			
			return FALSE;
			
		}
		
		// Set some variables to collect the received data
		
		$recv	= NULL;
		
		// Receive the data from the socket
		
		while (TRUE)
		{
			
			// Append the buffer to the received data
			
			$recv	.= stream_socket_recvfrom ($this->_stream, 4096);
			
			// If the string has been terminated
			
			if (strstr ($recv, "\r\n"))
			{
				
				// Break the loop
				
				break;
				
			}
			
		}
		
		// Development Mode
		
		if ($this->dev)
		{
			
			// Add to log
			
			$this->log[]	= 'Received data: ' . trim ($recv);
			
		}
		
		// If a reply was expected
		
		if ($reply !== FALSE)
		{
			
			// Get the reply code (first 3 characters of the reply)
			
			$replyCode	= substr ($recv, 0, 3);
			
			// If the expected reply is an array
			
			if (is_array ($reply))
			{
				
				// Check to see if the code is in the expected replies array
				
				if (!in_array ($replyCode, $reply))
				{
					
					// The code is not in the array so create an error
					
					$this->Error ('Invalid response: ' . $replyCode);
					
					// return FALSE
					
					return FALSE;
					
				}
				
			}
			
			// If the data is not an array
			
			else
			{
				
				// Check to see if the code is the same as the expected response
				
				if ($replyCode != $reply)
				{
					
					// The code is not the expected reponse so set an error
					
					$this->Error ('Invalid response: ' . $replyCode);
					
					// return FALSE
					
					return FALSE;
					
				}
				
			}
			
			// Development Mode
			
			if ($this->dev)
			{
				
				// Add to log
				
				$this->log[]	= 'Expected Response: ' . $replyCode;
				
			}
			
		}
		
		// return TRUE
		
		return TRUE;
		
	}