public static SessionState sessionRead(String sessionID, int versionNum, Server server) {
		SessionState session = null;
		try {
			DatagramSocket RPCSocket = new DatagramSocket();
			RPCSocket.setSoTimeout(1000);
			String callID = UUID.randomUUID().toString(); // A unique id for this call
			
			// Prep the information to be sent
			String tempSend = callID + "^" + SESSIONREAD_CODE + "^" + sessionID + "^" + versionNum;
			byte[] outBuffer = marshal(tempSend);
			DatagramPacket sendPacket = new DatagramPacket(outBuffer, outBuffer.length, server.ip, server.port);
			
			RPCSocket.send(sendPacket);
			
			// The packet has been sent, now wait for the server to reply
			
			byte[] inBuffer = new byte[4096];
			DatagramPacket receivedPacket = new DatagramPacket(inBuffer, inBuffer.length);
			String response = null;
			try {
				do {
					receivedPacket.setLength(inBuffer.length);
					RPCSocket.receive(receivedPacket);
					response = RPCClient.unmarshal(inBuffer);
					
					System.out.println(response);
					// Parse the response into a SessionState
					String[] responseSplit = response.split("\\^");
					session = new SessionState(sessionID, versionNum, null);
					session.setVersionNumber(Integer.parseInt(URLDecoder.decode(responseSplit[1], "UTF-8")));
					session.setMessage(URLDecoder.decode(responseSplit[2], "UTF-8"));
					session.setNewExpirationTime(URLDecoder.decode(responseSplit[3], "UTF-8"));
					
				} while (response == null || !(response.split("\\^")[0].equals(callID)));
			} catch (IOException e) {
				e.printStackTrace();
				return null;
			} 
			
			return session;
			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}