Click here to Skip to main content
Click here to Skip to main content

Android: How to communicate with .NET application via TCP

By , 9 Dec 2012
 

Introduction

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 for non-commercial use and can be downloaded from http://www.eneter.net. You need to download Eneter for.NET and Eneter for Android. More detailed technical info can be found at technical info.)

340714/CommunicationBetweenAndroidandNET.png

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="http://schemas.android.com/apk/res/android"
        package="net.client"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="7" />
        <uses-permission android:name="android.permission.INTERNET"/>
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".AndroidNetCommunicationClientActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
  3. The IP address 127.0.0.1 (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 127.0.0.1 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 10.0.2.2 that is routed to 127.0.0.1 (loopback) on the computer. In my example, the Android emulator uses 10.0.2.2 and  the .NET service is listening to 127.0.0.1.

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 eneter.net.system.EventHandler;
import android.app.Activity;
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. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // Get UI widgets.
        myMessageTextEditText = (EditText) findViewById(R.id.messageTextEditText);
        myResponseEditText = (EditText) findViewById(R.id.messageLengthEditText);
        mySendRequestBtn = (Button) findViewById(R.id.sendRequestBtn);
        
        // Subscribe to handle the button click.
        mySendRequestBtn.setOnClickListener(myOnSendRequestClickHandler);
        
        // 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()
            {
                @Override
                public void run()
                {
                    try
                    {
                        openConnection();
                    }
                    catch (Exception err)
                    {
                        EneterTrace.error("Open connection failed.", err);
                    }
                }
            });
        anOpenConnectionThread.start();
    }
    
    @Override
    public void onDestroy()
    {
        // Stop listening to response messages.
        mySender.detachDuplexOutputChannel();
        
        super.onDestroy();
    } 
    
    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.
        mySender.responseReceived().subscribe(myOnResponseHandler);
        
        // Create TCP messaging for the communication.
        // Note: 10.0.2.2 is a special alias to the loopback (127.0.0.1)
        //       on the development machine
        IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory();
        IDuplexOutputChannel anOutputChannel = 
           aMessaging.createDuplexOutputChannel("tcp://10.0.2.2:8060/");
        
        // Attach the output channel to the sender and be able to send
        // messages and receive responses.
        mySender.attachDuplexOutputChannel(anOutputChannel);
    }
    
    private void onSendRequest(View v)
    {
        // Create the request message.
        MyRequest aRequestMsg = new MyRequest();
        aRequestMsg.Text = myMessageTextEditText.getText().toString();
        
        // Send the request message.
        try
        {
            mySender.sendRequestMessage(aRequestMsg);
        }
        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.
        myRefresh.post(new Runnable()
            {
                @Override
                public void run()
                {
                    myResponseEditText.setText(Integer.toString(e.getResponseMessage().Length));
                }
            });
    }
    
    private EventHandler<TypedResponseReceivedEventArgs<MyResponse>> myOnResponseHandler
            
         = new EventHandler<TypedResponseReceivedEventArgs<MyResponse>>()
    {
        @Override
        public void onEvent(Object sender,
                            TypedResponseReceivedEventArgs<MyResponse> e)
        {
            onResponseReceived(sender, e);
        }
    };
    
    private OnClickListener myOnSendRequestClickHandler = new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            onSendRequest(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 = 
               aMessaging.CreateDuplexInputChannel("tcp://127.0.0.1:8060/");

            // Attach the input channel and start to listen to messages.
            myReceiver.AttachDuplexInputChannel(anInputChannel);

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

            // Detach the input channel and stop listening.
            // It releases the thread listening to messages.
            myReceiver.DetachDuplexInputChannel();
        }

        // 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:

340714/AndroidCommunicatesWithNetUI.jpg

License

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

About the Author

Ondrej_Uzovic
Architect
Slovakia Slovakia
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionAdding security PinmemberCory Shirts7-Jun-13 9:43 
I am doing something similar, but with a c++ application. The device is communicating directly to a host PC which is listening for communication.
 
How would one best add encryption to the application so that private data is not compromised?   Just wondering if you've had any experience with this or can provide good ponters.
 
I'm currently reading about the android side on their website, the next search would be for the pc application side.
AnswerRe: Adding security PinmemberOndrej_Uzovic9-Jun-13 9:38 
GeneralRe: Adding security PinmemberCory Shirts10-Jun-13 6:14 
GeneralThank You PinmemberBobbydoo816-May-13 3:34 
Took me a minute to figure out what I was doing, but works very well. Thank YOU!
QuestionHow to send data from android application to .net web site PinmemberMember 986794023-Mar-13 21:05 
Hello Sir,
I developed one android application it sends data(username,password) to .net website.
But finding some difficulty in .net webservices. How .net werservices takes data and store into sql server database.Please explain or give some snippets of .net webservices that store data into sql server database which is coming from my android application.
 
my android code:
 
package com.example.webservicecalldemo;
 
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
 
public class MainActivity extends Activity {
 
	private ProgressDialog pd;
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
 
		pd = new ProgressDialog(this);
	}
 
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
 
	/**
	 * This method listens click event for Call Webservice button
	 * TODO: check onClick attribute of button in layout file
	 * @param v
	 */
	public void callWebserviceClick(View v) {
		// Dummy username/password, just to show a demo
		String username = "testuser";
		String password = "testuser";
		
		new DemoWebserviceTask().execute(username, password);
	}
 
	/*
	 * TODO: Please read about AsyncTask, it is very very useful class in Android
	 */
	private class DemoWebserviceTask extends AsyncTask<String, Void, String> {
		
		@Override
		protected void onPreExecute() {
			pd.setMessage("Please wait....");
			pd.show();
		}
 
		@Override
		protected String doInBackground(String... params) {
			
			// params come from execute() method of AsyncTask
			String username = params[0];	// testuser
			String password = params[1];	// testuser

			HttpClient httpclient = new DefaultHttpClient();
			// *******************************************************
			// Don't use localhost or 127.0.0.1 to call web-service
			// Reason: localhost or 127.0.0.1 becomes loopback address of device
			// itself.
			// *******************************************************
			// HttpPost httppost = new HttpPost("http://localhost:8425/enterdata/Service1.asmx");

			// *******************************************************
			// Use host address if your web-services are hosted on any server
			// OR use IP address of your machine for testing purpose
			// TODO: Replace 192.168.0.200 with your server IP address 
			// *******************************************************
			HttpPost httppost = new HttpPost("http://localhost:18747/new/uspassWebService.asmx");
			
			ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("username", username));
            nameValuePairs.add(new BasicNameValuePair("password", password));
            try {
				httppost.setEntity((HttpEntity) new UrlEncodedFormEntity(nameValuePairs));
				HttpResponse httpResponse = httpclient.execute(httppost);
				
				if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
					HttpEntity entity = httpResponse.getEntity();
					String result = EntityUtils.toString(entity);
					return result;
				} else {
					return null;
				}
				
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
 
			return null;
		}
 
		@Override
		protected void onPostExecute(String result) {
			pd.dismiss();
			
			if(result == null) {
				// Show alert message to user because there is some problem in webservice call
				// You didn't get proper result from server.
				pd.setMessage("sending data failed");
				pd.show();
				
				return;
			}
			
			Log.d("Web-service-result", result);
			// Now you can play with your result
			// Enjoy, you get successful response from your web-service
		}
	}
}
 

Thanks.
AnswerRe: How to send data from android application to .net web site PinmemberOndrej_Uzovic24-Mar-13 0:09 
GeneralVery helpful Pinmember| B | A | N | D | I |16-Feb-13 0:03 
thanks
QuestionUsing it over the internet instead of locally? PinmemberMaster_T7-Jan-13 4:55 
Hi
 
I built an app using Eneter (the server is written in java) and it works using the local IPs
The code it's the same as in your example, only I used the real "public" IP address instead of the local one.
 
But when I do that the library stops working, it fails to listen to the channel:
 
java.net.BindException: Cannot assign requested address: JVM_Bind
	at java.net.DualStackPlainSocketImpl.bind0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
	at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
	at java.net.PlainSocketImpl.bind(Unknown Source)
	at java.net.ServerSocket.bind(Unknown Source)
	at eneter.messaging.messagingsystems.tcpmessagingsystem.NoneSecurityServerFactory.createServerSocket(NoneSecurityServerFactory.java:32)
	at eneter.messaging.messagingsystems.tcpmessagingsystem.internal.TcpListenerProvider.startListening(TcpListenerProvider.java:121)
	at eneter.messaging.messagingsystems.tcpmessagingsystem.TcpInputChannelBase.startListening(TcpInputChannelBase.java:74)
	at eneter.messaging.infrastructure.attachable.internal.AttachableDuplexInputChannelBase.attachDuplexInputChannel(AttachableDuplexInputChannelBase.java:38)
	at DARCOServer.Messaging.MessagingManager.OpenConnection(MessagingManager.java:74)
	at DARCOServer.MainClass.main(MainClass.java:36)
 
Any ideas?
AnswerRe: Using it over the internet instead of locally? PinmemberOndrej_Uzovic20-Jan-13 22:31 
AnswerRe: Using it over the internet instead of locally? PinmemberRenaud Gauthier12-Mar-13 6:09 
GeneralMy vote of 5 PinmemberPhat (Phillip) H. VU3-Jan-13 18:55 
nice article
GeneralMy vote of 5 PinmemberMember 952628628-Dec-12 7:40 
excellent
QuestionI use simulator,but does not work. PinmemberMember 952628628-Dec-12 7:39 
1.Run NetService first.(I tried IP 127.0.0.1 and current IP).
2.Changed IP at net.client.
3.Run net.client. Simulator showed "Sorry! The application AndroidNetCommunicationClient(process net.client) has stopped unexpectedly. Please try again."
 
I debuged net.client. stoped at
private EventHandler<TypedResponseReceivedEventArgs<MyResponse>> myOnResponseHandler
        = new EventHandler<TypedResponseReceivedEventArgs<MyResponse>>()

AnswerRe: I use simulator,but does not work. PinmemberOndrej_Uzovic31-Dec-12 23:19 
GeneralMy vote of 5 PinmemberSerguei_Ko13-Dec-12 22:10 
Interesting article!
GeneralMy vote of 5 Pinmemberchristoph brändle11-Dec-12 23:21 
good example of the broad usage of this framework, it is awesome, a real alternative to WCF Smile | :)
GeneralMy vote of 5 PinmemberURVISHSUTHAR9-Dec-12 20:29 
awesome
QuestionLaunch in Android SDK PinmemberBOWLINGBALL4-Dec-12 11:44 
The .Net side is up and running nicely.
I have all the framework, albeit it is version 4.2.0 whereas the code was written in 4.0.0
Have the latest SDK for Android and the Eneter jar referenced in the library
Checked the config xml to ensure internet access
Upon launching the code crashes Hard - critical failure in Main.
 
Any hint woudl be appreciated
AnswerRe: Launch in Android SDK PinmemberOndrej_Uzovic5-Dec-12 8:36 
GeneralRe: Launch in Android SDK PinmemberBOWLINGBALL7-Dec-12 7:27 
GeneralRe: Launch in Android SDK PinmemberOndrej_Uzovic8-Dec-12 8:54 
GeneralRe: Launch in Android SDK PinmemberBOWLINGBALL7-Dec-12 11:22 
GeneralRe: Launch in Android SDK PinmemberOndrej_Uzovic8-Dec-12 9:03 
GeneralRe: Launch in Android SDK PinmemberBOWLINGBALL10-Dec-12 11:44 
GeneralRe: Launch in Android SDK PinmemberOndrej_Uzovic11-Dec-12 8:23 
GeneralRe: Launch in Android SDK PinmemberBOWLINGBALL11-Jan-13 11:27 
GeneralRe: Launch in Android SDK PinmemberOndrej_Uzovic11-Jan-13 20:21 
GeneralMy vote of 5 PinmemberManar Ezzadeen17-Nov-12 9:19 
nice article
QuestionHelp needed !! [modified] Pinmemberseanmir13-Nov-12 7:37 
I've copied your code but my android app won't send anything !! at least c# app won't show anything !!
what should I do ?!
 

I did put a breakpoint in onclick event but it seems that the event not firing at all , so my onclick event not working !!! why ?!!! any idea
 
thank you so much

modified 13-Nov-12 13:59pm.

AnswerRe: Help needed !! PinmemberOndrej_Uzovic13-Nov-12 21:41 
GeneralRe: Help needed !! Pinmemberseanmir13-Nov-12 23:59 
GeneralRe: Help needed !! PinmemberOndrej_Uzovic14-Nov-12 22:03 
GeneralThat's what i am looking for. Pinmemberwreid16-Oct-12 23:52 
Hi Ondrej
 
well done, all five of my. Smile | :)
GeneralMy vote of 5 PinmvpKanasz Robert23-Sep-12 3:17 
another good one
QuestionIn 20 minutes to success PinmemberMember 87928464-Aug-12 11:54 
It is beautiful and rare that a tutorial program runs without problems. Big Grin | :-D
AnswerRe: In 20 minutes to success PinmemberOndrej_Uzovic5-Aug-12 2:05 
QuestionError: PinmemberIBR_BAR29-Apr-12 12:54 
Thank you for the article
I have tested the the example you descripe using EClipse and sdk android 2.3.3
I always get the message "The application androidNetComunicationClient (process net.client) has stopped unexpectedly.Please try again"
I have tried every thing but i still get this message.
Please help me
 
With Regards.
BugRe: Error: Pinmembermitnick90230-Apr-12 6:21 
GeneralRe: Error: PinmemberOndrej_Uzovic30-Apr-12 7:34 
GeneralRe: Error: Pinmembermitnick9022-May-12 12:22 
AnswerRe: Error: PinmemberOndrej_Uzovic30-Apr-12 7:39 
AnswerRe: Error: PinmemberMember 896983911-Jul-12 6:47 
GeneralRe: Error: PinmemberOndrej_Uzovic11-Jul-12 8:53 
Questionexample Project SimpleTcp Pinmemberroberto.reff12-Apr-12 5:39 
Hi Ondrej.
 

We have tested your SimpleTcp example. Works well! Smile | :)
 
Of course we played with the code and have tried to add features.
Like an second service on "server" side.
 
But it seems per service a single CreateDuplexInputChannel have to created as well. Is this right?
 
(Find below our enhanced implementation.)
 

Regards
Roberto
 

 

<pre lang="c#">
    public class TestRequest
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
 
    public class TestResponse : TestRequest
    {
        public bool Done { get; set; }
    }
 
    class Program
    {
        static void Main()
        {
            // Create message receiver.
            // It receives string and responses also string.
            var aTypedMessagesFactory = new DuplexTypedMessagesFactory();
            var aMessageReceiver = aTypedMessagesFactory.CreateDuplexTypedMessageReceiver<string, string>();
            var aMessageReceiverTypedSolution = aTypedMessagesFactory.CreateDuplexTypedMessageReceiver<TestResponse, TestRequest>();
            
            // Subscribe to receive messages.
            aMessageReceiver.MessageReceived += OnMessageReceived;
            aMessageReceiverTypedSolution.MessageReceived += OnMessageReceive;
 
            // Create input channel that will listen messages via TCP.
            var aTcpMessaging = new TcpMessagingSystemFactory();
            var anInputChannel = aTcpMessaging.CreateDuplexInputChannel("tcp://127.0.0.1:8055/");
 
            // Attach the input channel to the message receiver and start listening.
            aMessageReceiver.AttachDuplexInputChannel(anInputChannel);
            aMessageReceiverTypedSolution.AttachDuplexInputChannel(anInputChannel);
 
            Console.WriteLine("TCP service is running. To stop press ENTER.");
            Console.ReadLine();
 
            // Detach the input channel and stop listening.
            aMessageReceiver.DetachDuplexInputChannel();
            aMessageReceiverTypedSolution.DetachDuplexInputChannel();
        }
 
        private static void OnMessageReceived(object sender, TypedRequestReceivedEventArgs<string> e)
        {
            // Display receive message.
            Console.WriteLine("Received message: " + e.RequestMessage);
 
            // Send back simple response.
            var aResponseMessage = "Thanks for " + e.RequestMessage;
            var aReceiver = (IDuplexTypedMessageReceiver<string, string>) sender;
 
            aReceiver.SendResponseMessage(e.ResponseReceiverId, aResponseMessage);
        }
 
        private static void OnMessageReceive(object sender, TypedRequestReceivedEventArgs<TestRequest> e)
        {
            // Display receive message.
            Console.WriteLine("Received message: " + e.RequestMessage.Name);
 
            // Send back simple response.

            var aReceiver = (IDuplexTypedMessageReceiver<TestResponse, TestRequest>)sender;
 
            aReceiver.SendResponseMessage(e.ResponseReceiverId, new TestResponse{Done = true, Id = e.RequestMessage.Id, Name = e.RequestMessage.Name});
        }
    }

AnswerRe: example Project SimpleTcp PinmemberOndrej_Uzovic13-Apr-12 3:54 
GeneralRe: example Project SimpleTcp Pinmemberroberto.reff13-Apr-12 10:26 
QuestionReal situation PinmemberjirkaM15-Mar-12 0:40 
How to communicate in real situation through WiFi between android mobile device and comuter (especially concerning addresses of devices) ? Thank You, jirkaM.
AnswerRe: Real situation PinmemberOndrej_Uzovic16-Mar-12 21:48 
QuestionRe: Real situation Pinmemberdragpre21-Aug-12 2:21 
AnswerRe: Real situation PinmemberOndrej_Uzovic21-Aug-12 10:53 

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

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130617.1 | Last Updated 9 Dec 2012
Article Copyright 2012 by Ondrej_Uzovic
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid