In the biz, this is called Machine-To-Machine, or M2M. In Canada, both Rogers and Bell offer this service, but because it’s aimed at big companies it may be hard to get service from them. Rogers now seems to offer a dev kit for $200 that gets you 3 SIMs and 50 SMS messages per month, plus 30 MB of data for the first 6 months.
We built something similar to that for a prototype at RIM back in the day. We wrote a general purpose transport system on top of the BlackBerry’s PIN messaging system, and used it for all kinds of P2P data exchange. I think PIN messages were limited to 512 bytes (including the header), since it was based on the old Mobitex system.
To transmit some data, we would first construct an application-level packet (the details aren’t important), and hand that off to the transport. The transport began by performing a handshake with the intended recipients to agree on a connection number. With that, the next step was to encrypt and MAC the packet for each of the recipients. (Oh, did I mention we built in RSA encryption?). Then the transport would break down the packet into chunks of about 450 bytes (to stay below the maximum PIN message size) and insert a header made up of a distinct tag, connection number, and sequence number, before sending out the message by the default PIN sending system.
Any time a PIN message was received, a program on the phone would check the beginning of the message for the distinct tag associated with the application. If it found the tag, it would read the contents of the message, then delete the message from the phone’s inbox to prevent the end-user from getting a message notification and stop it from appearing in the inbox.
With the contents of the message, the device would wait until all the messages in the sequence for that connection had arrived (PIN messages may be delivered out-of-order), reassemble the encrypted packet, then verify and decrypt the message. From there, the packet was handed off from the transport for regular processing.
You could easily do the same thing with SMS. With SMS you have 140 bytes, which is 160 characters from a 7 bit alphabet, minus the characters that get eaten up by your tag, connection number, and sequence number.