Table Of Contents

SMSLib for .NET


SMSLib for .NET is a port of the Java SMSLib library for the Microsoft .NET Framework platform. Its an attempt to create a binary distribution for the same java sources that the normal SMSLib is build from. The binary conversion is possible with the help of IKVM tools.

Please note that SMSLib for .NET is experimental! Please read carefully the following document in order to understand the port and know what to expect.

A bit of a history...

Looking a couple of years back, there was a seperate SMSLib for .NET codebase. So, I had to maintain and enhance two seperate versions, a C# version and a Java version. Supporting and synchronizing two platforms was found to be a tremendous load for me. Sadly, I've decided to drop one of the two. I like Java very much - I also like C# a lot, but I decided to go with Java since it was the most established version. Needless to say that I've received numerous complaints since then...

Some time ago I got to know a bit more about some conversion tools, mainly IKVM. My problem was that SMSLib is not an 100% pure Java library - there are binary dependencies, namely the JavaComm / RxTx serial communications' libraries. My first attempts to port SMSLib to the .NET platform failed misserably, as I couldn't make the comm library work. At the end, I decided to take a different approach. The result of this work is that now I can create .NET projects, use SMSLib as a DLL and having the full SMSLib functionality available on the .NET Framework platform, by keeping the same sources for Java as well as for .NET.


I decided to go with IKVM. IKVM is licensed with a business friendly license, like SMSLib is. It also appeared to me as a more mature product. I won't bother you with the exact conversion details - if you are reading this you are probably a .NET developer, so I assume that you don't give a damn about how this is done. What you should really remember is that SMSLib is packaged as a .NET Framework DLL, ready to be downloaded and used in your project.


Enough with the theory! Below you will find the installation instructions for SMSLib for .NET. Its a pretty simple process.

The following installation instructions are valid for IKVM version Different IKVM versions may implement different packaging of .NET/Java classes, so the installation may differ a bit.

Get the packages

In order to use SMSLib, you should download:

  • The SMSLib for .NET package, available here.
  • The IKVM Binary package, available here.


Unpack the SMSLib for .NET package in a directory of its own. The package contains the ready-to-use .NET SMSLib library (smslib-x.y.z.dll) plus two sample projects to get you started.

Unpack the IKVM package at a temporary location. Grap all the files named bin/IKVM.*.dll and copy them in the Libraries subdirectory of the SMSLib for .NET directory.

That's it!

Sample Code

There are two sample projects for your initial tests. The ReadMessages project which reads messages from a serial modem or phone and the SendMessage project which sends a message via a serial modem or phone.

ReadMessages sample

  • Open the ReadMessages project with Visual Studio.
  • Make sure that the following files (located in the Libraries subdirectory) are added in the "References" section of the project.
    • Comm2IP.dll
    • All IKVM.*.dll files
    • smslib-x.y.z.dll
  • Note: The sample assumes that your phone/modem is plugged on COM1. If this is not your case, you must search for and replace the COM port references with your port in use.
  • Run the sample. You should get a list of your phone's / modem's messages.

What is Comm2IP?

Since the java comm libraries (JavaComm and/or RxTx) could not be converted and used by the .NET application, I decided to solve the problem differently.

The Comm2IP is a .NET native application which acts as an interface between a COM port and a socket. Traffic received from the one is pushed to the other and vice versa. Why I did this? Because, by doing this, I would be able to connect to a serial modem in the same way as I connect to an IP modem: I don't use a COM port, I use a network connection. Bye bye javacomm libraries!

The Comm2IP is build as a .DLL in order to be easy for you to include it in your SMSLib projects.

The Comm2IP is a vital component and I am sure it will be the subject of most support questions. If you don't set it up correctly, you will not be able to communicate with your modem. Examine the relevant code in the ReadMessages.cs source file:

Comm2IP.Comm2IP com1 = new Comm2IP.Comm2IP(new byte[] { 127, 0, 0, 1 }, 12000, "com1", 19200); new Thread(new ThreadStart(com1.Run)).Start();

This code:

  • Initializes the Comm2IP component to bind to the local host ( under port 12000 and to the com1 serial port, with a baud rate of 19200bps.
  • Starts the background listening thread.

From now on, all traffic from com1 will be forwarded to the listener which binds on and vice versa.

Later on in the code, you create your IP modem gateway:

IPModemGateway gateway = new IPModemGateway("modem.com1", "", 12000, "Nokia", "");

which binds to the same host:port that the Comm2IP component is initialized.

Remember: One Comm2IP thread is for one modem. For multiple modems you should create a matching number of Comm2IP threads!

Debug logging

In the "/Misc" subdirectory of the SMSLib distribution file you will find the file names If you wish to enable the debug output, just copy the file together with your applications (i.e. your .EXE files).

How to build the .DLL file

If you would like to build the .dll file from the latest SMSLib distribution, follow these simple steps:

  • Download the IKVM package and unzip it in a directory.
  • Locate the IKVM bin directory. Copy the following files in the bin directory: smslib-x.y.z.jar, the log4j-x.y.z.jar and the commons-net-2.0.jar.
  • Exit to the DOS prompt and give the following command:
  • ikvmc -target:library smslib-x.y.z.jar log4j-1.2.15.jar commons-net-2.0.jar

You will get some warnings about non-existent referenced classes, but for most cases the .dll build after this command is OK for use.

Now what?

Once more, SMSLib for .NET should be considered experimental until further feedback is given. As a result, the .NET specific documentation is a bit short, but I am working on it.

Remember that the SMSLib is actually the same for Java and for .NET. The entire SMSLib functionality is available to you. The Support page will guide you in case you need support.

2002-2016,, @ smslib at