diff --git a/src/main.rs b/src/main.rs
index 7ee2d0806d45f994fe08835df494f8ae6b03f026..715ec1c7abe5f308a2061910280f7061a949b992 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -33,20 +33,48 @@ fn main() {
     let server = thread::spawn(|| {
         let listener = TcpListener::bind(LIDAR_ADDRESS).unwrap();
         let mut stream;
-        let mut message =  [0u8; 2];
         match listener.accept() {
             Ok((socket, addr)) => {
                 println!("server: new client: {:?}", addr); stream=socket;
                 thread::sleep(time::Duration::new(1,0));
-                loop {
-                    match stream.read_exact(&mut message) {
-                        Ok(_) => {println!("server got: {} {}", message[0], message[1]);
-                        let written_size = stream.write(&[69 as u8, 96 as u8]);
-                        println!("server wrote {:?} to stream.", written_size);
+
+                let mut message: [u8; 2048] = [0; 2048];
+                let mut message_len = 0;
+                let mut recording = false;
+                
+
+                for r in stream.try_clone().expect("stream clone failed").bytes() {
+                    match r {
+                        Ok(b) => {
+                            if b == 2 {
+                                //println!("Server found start of message");
+                                message[message_len] = b;
+                                recording = true;
+                                message_len+=1;
+                            }
+                            else if b == 3 {
+                                message[message_len] = b;
+                                message_len+=1; // since length now is total bytes, not index
+                                //println!("Server found end of message");
+                                println!("Server got: {:?}", String::from_utf8_lossy(&message[0..message_len]));
+                                let written_size = stream.write(&[69 as u8, 96 as u8]);
+                                println!("server wrote {:?} to stream.", written_size);
+
+                                // reset everything for next message.
+                                recording = false;
+                                message_len = 0;
+                                //break;
+                            }
+                            else if recording {
+                                message[message_len] = b;
+                                message_len+=1;
+                            }
+
                         },
-                        Err(e) => {println!("Some error in readToString in swerver: {}", e)},
-                    }
+                        Err(_) => {},
+                    } 
                 }
+                
             },
             Err(e) => println!("couldn't get client: {:?}", e),
         }
@@ -131,7 +159,7 @@ fn main() {
 
             // request lidar data
             //thread::sleep(time::Duration::new(3,0));    
-            let _ = stream.write_all("\x02sRN LMDscandata\x03"); 
+            let _ = stream.write_all(b"\x02sRN LMDscandata\x03"); 
             let stream_write_response = stream.write(&[65 as u8, 66 as u8]);
             println!("mapper wrote {:?} to stream.", stream_write_response);