Problem in receieving message
Serial.print(lat,lon);


That doesn't do what you think it does.  That is trying to print the latitude encoded in base "lon", which just isn't going to work.

Instead you need to send it as separate operations:

Serial.print(lat);
Serial.print(",");
Serial.print(lon);


Also you should separate out the GPS and GSM routines.  Create a function that gets the latitude and longitude, and another function that sends the two values as a text message.  Then you can keep things as discrete obvious steps and not get confused with what is happening when.