Click here to Skip to main content
11,584,288 members (62,668 online)
Click here to Skip to main content

Android: How to communicate with .NET application via TCP

, 20 Aug 2013 CPOL 247.8K 6.2K 212
Rate this:
Please Sign up or sign in to vote.
Simple example showing how to communicate between Android and .NET application.

Related articles:


The example bellow implements a simple request-response communication between Android and .NET application. The Android application is a simple client using the .NET application as a service to calculate length of the text message.

The example bellow uses Eneter Messaging Framework making the whole communication very simple. (The framework is free and can be downloaded from You need to download Eneter for.NET and Eneter for Android. More detailed technical info can be found at technical info.)


Important: please follow this procedure (for Eclipse) to add the Eneter library into the Android project:(To add a library into the project you need to import it instead of adding it via project properties.Also ensure Java compliance level is set to 6.0. Properties -> Java Compiler -> JDK Compliance -> 1.6.)

  1. Create a new folder 'libs' in your project. (use exactly name libs)
  2. Right click on 'libs' and choose 'Import...' -> 'General/File System' -> 'Next'.
  3. Then click 'Browser' button for 'From directory' and navigate to directory with the Eneter library.
  4. Select the check box.
  5. Press 'Finish'

TCP on Android

When you implement the communication via TCP on Android, you must count with two specifics:

  1. You must set INTERNET permission for your Android application!
  2. If the permission is not set, the application is not allowed to communicate across the network. To set the INTERNET permission you must add the following line to AndroidManifest.xml.

    <uses-permission android:name="android.permission.INTERNET"/>

    An example of AndroidManifest.xml allowing communication across the network:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android=""
        android:versionName="1.0" >
        <uses-sdk android:minSdkVersion="7" />
        <uses-permission android:name="android.permission.INTERNET"/>
            android:label="@string/app_name" >
                android:label="@string/app_name" >
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
  3. The IP address (loopback) cannot be set on the Android emulator to communicate with the .NET application!
  4. The emulator acts as a separate device. Therefore, the IP address is the loopback of that device and cannot be used for the communication with other applications running on the same computer as the emulator.

    Instead of that you must use a real IP address of the computer or the emulator can use the special address that is routed to (loopback) on the computer. In my example, the Android emulator uses and the .NET service is listening to

Android Client Application

The Android client is a very simple application allowing user to put some text message and send the request to the service to get back the length of the text. When the response message is received it must be marshalled to the UI thread to display the result. Also please do not forget to set android.permission.INTERNET.

The whole implementation is very simple with using the Eneter framework:

package net.client;

import eneter.messaging.diagnostic.EneterTrace;
import eneter.messaging.endpoints.typedmessages.*;
import eneter.messaging.messagingsystems.messagingsystembase.*;
import eneter.messaging.messagingsystems.tcpmessagingsystem.TcpMessagingSystemFactory;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class AndroidNetCommunicationClientActivity extends Activity
    // Request message type
    // The message must have the same name as declared in the service.
    // Also, if the message is the inner class, then it must be static.
    public static class MyRequest
        public String Text;

    // Response message type
    // The message must have the same name as declared in the service.
    // Also, if the message is the inner class, then it must be static.
    public static class MyResponse
        public int Length;
    // UI controls
    private Handler myRefresh = new Handler();
    private EditText myMessageTextEditText;
    private EditText myResponseEditText;
    private Button mySendRequestBtn;
    // Sender sending MyRequest and as a response receiving MyResponse.
    private IDuplexTypedMessageSender<MyResponse, MyRequest> mySender;
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState)
        // Get UI widgets.
        myMessageTextEditText = (EditText) findViewById(;
        myResponseEditText = (EditText) findViewById(;
        mySendRequestBtn = (Button) findViewById(;
        // Subscribe to handle the button click.
        // Open the connection in another thread.
        // Note: From Android 3.1 (Honeycomb) or higher
        //       it is not possible to open TCP connection
        //       from the main thread.
        Thread anOpenConnectionThread = new Thread(new Runnable()
                public void run()
                    catch (Exception err)
                        EneterTrace.error("Open connection failed.", err);
    public void onDestroy()
        // Stop listening to response messages.
    private void openConnection() throws Exception
        // Create sender sending MyRequest and as a response receiving MyResponse
        IDuplexTypedMessagesFactory aSenderFactory =
           new DuplexTypedMessagesFactory();
        mySender = aSenderFactory.createDuplexTypedMessageSender(MyResponse.class, MyRequest.class);
        // Subscribe to receive response messages.
        // Create TCP messaging for the communication.
        // Note: is a special alias to the loopback (
        //       on the development machine
        IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory();
        IDuplexOutputChannel anOutputChannel = 
        // Attach the output channel to the sender and be able to send
        // messages and receive responses.
    private void onSendRequest(View v)
        // Create the request message.
        MyRequest aRequestMsg = new MyRequest();
        aRequestMsg.Text = myMessageTextEditText.getText().toString();
        // Send the request message.
        catch (Exception err)
            EneterTrace.error("Sending the message failed.", err);
    private void onResponseReceived(Object sender, final TypedResponseReceivedEventArgs<MyResponse> e)
        // Display the result - returned number of characters.
        // Note: Marshal displaying to the correct UI thread. Runnable()
                public void run()
    private EventHandler<TypedResponseReceivedEventArgs<MyResponse>> myOnResponseHandler
         = new EventHandler<TypedResponseReceivedEventArgs<MyResponse>>()
        public void onEvent(Object sender,
                            TypedResponseReceivedEventArgs<MyResponse> e)
            onResponseReceived(sender, e);
    private OnClickListener myOnSendRequestClickHandler = new OnClickListener()
        public void onClick(View v)

.NET Service Application

The .NET service is a simple console application listening to TCP and receiving requests to calculate the length of a given text.

The implementation of the service is very simple:

using System;
using Eneter.Messaging.EndPoints.TypedMessages;
using Eneter.Messaging.MessagingSystems.MessagingSystemBase;
using Eneter.Messaging.MessagingSystems.TcpMessagingSystem;

namespace ServiceExample
    // Request message type
    public class MyRequest
        public string Text { get; set; }

    // Response message type
    public class MyResponse
        public int Length { get; set; }

    class Program
        private static IDuplexTypedMessageReceiver<MyResponse, MyRequest> myReceiver;

        static void Main(string[] args)
            // Create message receiver receiving 'MyRequest' and receiving 'MyResponse'.
            IDuplexTypedMessagesFactory aReceiverFactory = new DuplexTypedMessagesFactory();
            myReceiver = aReceiverFactory.CreateDuplexTypedMessageReceiver<MyResponse, MyRequest>();

            // Subscribe to handle messages.
            myReceiver.MessageReceived += OnMessageReceived;

            // Create TCP messaging.
            IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory();
            IDuplexInputChannel anInputChannel = 

            // Attach the input channel and start to listen to messages.

            Console.WriteLine("The service is running. To stop press enter.");

            // Detach the input channel and stop listening.
            // It releases the thread listening to messages.

        // It is called when a message is received.
        private static void OnMessageReceived(object sender, 
              TypedRequestReceivedEventArgs<MyRequest> e)
            Console.WriteLine("Received: " + e.RequestMessage.Text);

            // Create the response message.
            MyResponse aResponse = new MyResponse();
            aResponse.Length = e.RequestMessage.Text.Length;

            // Send the response message back to the client.
            myReceiver.SendResponseMessage(e.ResponseReceiverId, aResponse);

And here are applications communicating together:



This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Slovakia Slovakia
My programming path started in 1987 when I got my first computer Sharp MZ-800.
It came with 8 bit CPU Z80, 64Kb RAM and the tape recorder. It was a great machine. I think I still have it somewhere.
I was fascinated and I started to write first programs. Eventually I became developer and software architect. I like innovations and clean nice solutions.

You may also be interested in...

Comments and Discussions

GeneralRe: No Output on ANdroid emulator and no indication in serviceExample Pin
Member 1075401119-Apr-14 20:54
memberMember 1075401119-Apr-14 20:54 
GeneralRe: No Output on ANdroid emulator and no indication in serviceExample Pin
Ondrej_Uzovic20-Apr-14 2:11
memberOndrej_Uzovic20-Apr-14 2:11 
GeneralRe: No Output on ANdroid emulator and no indication in serviceExample Pin
Member 1075401130-Apr-14 8:36
memberMember 1075401130-Apr-14 8:36 
GeneralRe: No Output on ANdroid emulator and no indication in serviceExample Pin
Ondrej_Uzovic30-Apr-14 8:57
memberOndrej_Uzovic30-Apr-14 8:57 
Questioni want to clarify one thing which is possible on mobile Pin
kannanvdsr8912-Mar-14 20:29
memberkannanvdsr8912-Mar-14 20:29 
AnswerRe: i want to clarify one thing which is possible on mobile Pin
Ondrej_Uzovic13-Mar-14 6:16
memberOndrej_Uzovic13-Mar-14 6:16 
QuestionConnect with bluetooth Pin
Rushil Shah28-Jan-14 19:37
memberRushil Shah28-Jan-14 19:37 
AnswerRe: Connect with bluetooth Pin
Ondrej_Uzovic28-Jan-14 20:56
memberOndrej_Uzovic28-Jan-14 20:56 
QuestionError Pin
Member 104475405-Dec-13 6:20
memberMember 104475405-Dec-13 6:20 
AnswerRe: Error Pin
Ondrej_Uzovic8-Dec-13 5:51
memberOndrej_Uzovic8-Dec-13 5:51 
QuestionError Pin
Member 1033162811-Oct-13 22:50
memberMember 1033162811-Oct-13 22:50 
AnswerRe: Error Pin
Ondrej_Uzovic12-Oct-13 0:16
memberOndrej_Uzovic12-Oct-13 0:16 
GeneralRe: Error Pin
Member 1033162813-Oct-13 2:44
memberMember 1033162813-Oct-13 2:44 
GeneralRe: Error Pin
Ondrej_Uzovic13-Oct-13 6:16
memberOndrej_Uzovic13-Oct-13 6:16 
GeneralRe: Error Pin
Member 1033162813-Oct-13 7:01
memberMember 1033162813-Oct-13 7:01 
QuestionFailed to connect... Pin
Member 1021508423-Sep-13 0:05
memberMember 1021508423-Sep-13 0:05 
AnswerRe: Failed to connect... Pin
Ondrej_Uzovic23-Sep-13 1:24
memberOndrej_Uzovic23-Sep-13 1:24 
QuestionWhat is the error? Pin
Ammar Amros30-Aug-13 8:48
memberAmmar Amros30-Aug-13 8:48 
AnswerRe: What is the error? Pin
Ondrej_Uzovic31-Aug-13 0:48
memberOndrej_Uzovic31-Aug-13 0:48 
GeneralRe: Everythig is ok Pin
Ammar Amros15-Sep-13 3:54
memberAmmar Amros15-Sep-13 3:54 
GeneralRe: Everythig is ok Pin
Ondrej_Uzovic16-Sep-13 7:02
memberOndrej_Uzovic16-Sep-13 7:02 
GeneralI don't know waht is the wrong Pin
Ammar Amros17-Sep-13 11:45
memberAmmar Amros17-Sep-13 11:45 
GeneralRe: I don't know waht is the wrong Pin
Ondrej_Uzovic17-Sep-13 20:52
memberOndrej_Uzovic17-Sep-13 20:52 
QuestionIs it coerct code? Pin
Ammar Amros30-Aug-13 3:40
memberAmmar Amros30-Aug-13 3:40 
AnswerRe: Is it coerct code? Pin
Ondrej_Uzovic30-Aug-13 6:20
memberOndrej_Uzovic30-Aug-13 6:20 
Questionwifi device Pin
Ammar Amros28-Aug-13 13:28
memberAmmar Amros28-Aug-13 13:28 
AnswerRe: wifi device Pin
Ondrej_Uzovic29-Aug-13 21:36
memberOndrej_Uzovic29-Aug-13 21:36 
GeneralMy vote of 5 Pin
DrABELL21-Aug-13 0:44
professionalDrABELL21-Aug-13 0:44 
QuestionThanks! Pin
zipper13524615-Aug-13 8:09
memberzipper13524615-Aug-13 8:09 
Questionbut on server side if want to show in Textbox or Reachtextbox is it possible ? Pin
Deepak236-Aug-13 23:33
memberDeepak236-Aug-13 23:33 
AnswerRe: but on server side if want to show in Textbox or Reachtextbox is it possible ? Pin
Ondrej_Uzovic8-Aug-13 21:46
memberOndrej_Uzovic8-Aug-13 21:46 
QuestionI think same thing can be done using WCF?? Pin
Mohammed Hameed11-Jul-13 1:45
professionalMohammed Hameed11-Jul-13 1:45 
AnswerRe: I think same thing can be done using WCF?? Pin
Ondrej_Uzovic31-Aug-13 1:34
memberOndrej_Uzovic31-Aug-13 1:34 
QuestionIf it support binary streams? Pin
alin.zhang19-Jun-13 19:42
memberalin.zhang19-Jun-13 19:42 
AnswerRe: If it support binary streams? Pin
Ondrej_Uzovic20-Jun-13 9:04
memberOndrej_Uzovic20-Jun-13 9:04 
GeneralRe: If it support binary streams? Pin
iJam_j27-Nov-13 23:42
memberiJam_j27-Nov-13 23:42 
GeneralRe: If it support binary streams? Pin
Ondrej_Uzovic28-Nov-13 7:33
memberOndrej_Uzovic28-Nov-13 7:33 
QuestionAdding security Pin
Cory Shirts7-Jun-13 9:43
memberCory Shirts7-Jun-13 9:43 
AnswerRe: Adding security Pin
Ondrej_Uzovic9-Jun-13 9:38
memberOndrej_Uzovic9-Jun-13 9:38 
GeneralRe: Adding security Pin
Cory Shirts10-Jun-13 6:14
memberCory Shirts10-Jun-13 6:14 
GeneralThank You Pin
Bobbydoo816-May-13 3:34
memberBobbydoo816-May-13 3:34 
QuestionHow to send data from android application to .net web site Pin
Member 986794023-Mar-13 21:05
memberMember 986794023-Mar-13 21:05 
AnswerRe: How to send data from android application to .net web site Pin
Ondrej_Uzovic24-Mar-13 0:09
memberOndrej_Uzovic24-Mar-13 0:09 
GeneralVery helpful Pin
| B | A | N | D | I |16-Feb-13 0:03
member| B | A | N | D | I |16-Feb-13 0:03 
QuestionUsing it over the internet instead of locally? Pin
Master_T7-Jan-13 4:55
memberMaster_T7-Jan-13 4:55 
AnswerRe: Using it over the internet instead of locally? Pin
Ondrej_Uzovic20-Jan-13 22:31
memberOndrej_Uzovic20-Jan-13 22:31 
AnswerRe: Using it over the internet instead of locally? Pin
Renaud Gauthier12-Mar-13 6:09
memberRenaud Gauthier12-Mar-13 6:09 
GeneralMy vote of 5 Pin
Phat (Phillip) H. VU3-Jan-13 18:55
memberPhat (Phillip) H. VU3-Jan-13 18:55 
GeneralMy vote of 5 Pin
Member 952628628-Dec-12 7:40
memberMember 952628628-Dec-12 7:40 
QuestionI use simulator,but does not work. Pin
Member 952628628-Dec-12 7:39
memberMember 952628628-Dec-12 7:39 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150603.1 | Last Updated 20 Aug 2013
Article Copyright 2012 by Ondrej_Uzovic
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid