every message i send from client to server ends with null (null pointer exception). how do i fix? : I doing a sort of test run for the networked portion of an application I am building and I am running into a problem where every message I send from the client to the server has null attached to the end of it. so for example "hello" would be printed by the server as "hellonull". the actual application needs to be able to send commands that the server will read. this test only prints the message. I have found that this is a problem with a null pointer exception and I understand that but what I don't understand is where null is coming from. is it the end of the stream? I thought that the end of stream would be indicated by -1. and if null does indicate the end of the stream how do I exist the stream without reaching null? 
this is the main class for the server:

    package servertester;
    import java.io.*;
    import java.net.*;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;

    public class ServerLaunch {
	
	public static void main(String[] args) throws IOException{
	
			final int PORT = 4444;
			final int NUM_THREADS = 50;
			
				ExecutorService pool = Executors.newFixedThreadPool(NUM_THREADS);
				
				try(ServerSocket serv = new ServerSocket(PORT)){
					while(true){
						try{
							Socket con = serv.accept();
							Runnable r = new      ServerRunnable(con);
							Future<?> future = pool.submit(r);
							String msg = (String) future.get();
							System.out.println(msg);
							
						}catch(Exception e){
							System.out.println(e);
						}
						
					
		}
		
	}
	}
	}
	

and this is the Runnable class


    package servertester;
    import java.net.*;
    import java.io.*;
    import java.util.*;

    public class ServerRunnable implements Runnable{

	private Socket con;
	
	ServerRunnable(Socket con){
		this.con = con;
	}
	
	@Override
	public void run() {
		InputStream in;
		try {
			StringBuilder str = new StringBuilder();
			in = con.getInputStream();
			BufferedInputStream bin = new BufferedInputStream(in);
			Reader reader = new InputStreamReader(bin);
			
			for(int c = reader.read(); c != -1; c = reader.read()){
				
				str.append((char) c);
			}
			System.out.println(str);
		}catch(NullPointerException n){
			System.out.println("np");
		}
			catch (IOException e) {
			System.out.println("io");
			
			}finally{
				if(con != null)
					try {
						con.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
			}
			
			
		}
		
		
		
	}

	
	

thanks in advance for the help...