I assume that by IN you mean Intelligent Network? Usually IN is not relevant for sending/receiving SMS messages - you need to connect to the Short Message Service Center (SMSC) (or some proxy/gateway) in order to do that.
As also pointed out by Bombe, there are several protocols that you can use to connect to the mobile operators SMSC, it is all quite vendor-specific, due to historic reasons. Common protocols are:
- SMPP (most popular, becoming the de-facto standard). There are two SMPP java libraries:
- SMPP API at SourceForge - very stable and mature library, I have personally used it in several projects and can recommend it.
- Logica OpenSMPP - library from the company that developed the SMPP specification. I have never used this, so I cannot comment on its maturity or stability.
- UCP (specification) - quite old standard. I'm not aware of any open java libraries for this protocol. However, as it is all ASCII-based, it is fairly easy to implement yourself (as long as you like messing with bytes :-)).
- CIMD2 - specification for communicating with Nokia SMSCs. It is becoming legacy, as I have heard that newer Nokia SMSC releases also support SMPP. No known open java libraries for this either.
- and finally, there are gazillions of custom protocols implemented to make it "easier" for 3rd-party developers to connect to SMSCs. These are usually based on HTTP and XML (SOAP, if you are lucky).
To sum up, the choice of protocol is not yours to make. It is usually dictated by the SMSC vendor or the mobile operator (in case they have developed some sort of "proxy/gateway", to shield their SMSC from potential programming errors that external developers can make).
P.S. in case you are not limited to java, you can also have a look at Kannel - the Open Source WAP and SMS gateway. I have not used it myself, but as far as I have heard, they should have all major protocols covered.