Android to PC TCP communication working only on Emulator

795 views Asked by At

I have a requirement to implement an android application to communicate with a c# application on a PC over TCP (wifi). I have followed this -

https://workspaces.codeproject.com/dhl_hh/android-how-to-communicate-with-net-application-vi

tutorial to implement the solution which uses the eneter library.

This works just fine on the emulator as the IP used for C# application is

IDuplexInputChannel anInputChannel
            = aMessaging.CreateDuplexInputChannel("tcp://127.0.0.1:8060/"); 

and the IP used for the Android app is

IDuplexOutputChannel anOutputChannel
        = aMessaging.createDuplexOutputChannel("tcp://10.0.2.2:8060/");

However, when i transfer the android app to actual device and try to transmit data over wifi the C# application does not display the string transferred from the mobile device as shown in the tutorial.

The fixes I tried was,

  • Kept the C# IP as is (127.0.0.1) and changed the android IP to PC's IP (192.168.137.1) where the c# app is running.
  • The fix that works : Changed the C# IP to the PC's actual IP (192.168.137.1) and changed the IP address of the android app to the actual IP of the android device (192.168.137.1).
  • FYI : I did not change the port number

These fixes did not fix the issue and I have no clue on how to do this. I was trying many solutions for few days now as I am a novice to the filed of tcp programming.

I would really appreciate you experts advice on how to fix this issue.

You help s greatly appreciated :)

Thanks in advance.

PS

  • Actual IP of PC (with the C# program) - 192.168.137.1
  • Actual IP of the android device (with the android app) - 192.168.137.14

Logcat output

05-29 12:49:17.988: E/EneterMessaging(1792): ~  1 eneter.messaging.endpoints.typedmessages.DuplexTypedMessageSender.sendRequestMessage DuplexTypedMessageSender<MyResponse, MyRequest> atached to the duplex output channel '' failed to send the request message because it is not attached to any duplex output channel.
05-29 12:49:17.988: E/EneterMessaging(1792): ~  1 net.client.AndroidNetCommunicationClientActivity.onSendRequest Sending the message failed.

05-29 12:49:17.988: E/EneterMessaging(1792): Exception:

05-29 12:49:17.988: E/EneterMessaging(1792): java.lang.IllegalStateException: DuplexTypedMessageSender<MyResponse, MyRequest> atached to the duplex output channel '' failed to send the request message because it is not attached to any duplex output channel.

05-29 12:49:17.988: E/EneterMessaging(1792): eneter.messaging.endpoints.typedmessages.DuplexTypedMessageSender.sendRequestMessage(DuplexTypedMessageSender.java:67)

05-29 12:49:17.988: E/EneterMessaging(1792): net.client.AndroidNetCommunicationClientActivity.onSendRequest(AndroidNetCommunicationClientActivity.java:120)

05-29 12:49:17.988: E/EneterMessaging(1792): net.client.AndroidNetCommunicationClientActivity.access$1(AndroidNetCommunicationClientActivity.java:111)

05-29 12:49:17.988: E/EneterMessaging(1792): net.client.AndroidNetCommunicationClientActivity$2.onClick(AndroidNetCommunicationClientActivity.java:160)

05-29 12:49:17.988: E/EneterMessaging(1792): android.view.View.performClick(View.java:4102)

05-29 12:49:17.988: E/EneterMessaging(1792): android.view.View$PerformClick.run(View.java:17084)

05-29 12:49:17.988: E/EneterMessaging(1792): android.os.Handler.handleCallback(Handler.java:615)

05-29 12:49:17.988: E/EneterMessaging(1792): android.os.Handler.dispatchMessage(Handler.java:92)

05-29 12:49:17.988: E/EneterMessaging(1792): android.os.Looper.loop(Looper.java:155)

05-29 12:49:17.988: E/EneterMessaging(1792): android.app.ActivityThread.main(ActivityThread.java:5520)

05-29 12:49:17.988: E/EneterMessaging(1792): java.lang.reflect.Method.invokeNative(Native Method)

05-29 12:49:17.988: E/EneterMessaging(1792): java.lang.reflect.Method.invoke(Method.java:511)

05-29 12:49:17.988: E/EneterMessaging(1792): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)

05-29 12:49:17.988: E/EneterMessaging(1792): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)

05-29 12:49:17.988: E/EneterMessaging(1792): dalvik.system.NativeStart.main(Native Method)

05-29 12:49:17.988: E/EneterMessaging(1792): ==========
2

There are 2 answers

0
JustAndrei On BEST ANSWER

The Windows Firewall should be configured to allow that connection or turned off.

0
a redshaw On

It is a bit late to answer this post, but I have managed to get communication between my PC and tablet using this project. I tried many combinations of IP addresses and found that it works only when the IP addresses in the PC NetService (c#) and the Android Communication Client were the same and defined by my own network IP address e.g. "192.168.1.155" in the example given below: ie. in the c# NetService programme:

IDuplexInputChannel anInputChannel = aMessaging.CreateDuplexInputChannel("tcp://192.168.1.155:4080/");

and in the Android Client programme:

IDuplexOutputChannel anOutputChannel = aMessaging.createDuplexOutputChannel("tcp://192.168.1.155:4080/");

The programme works as described in the article when the tablet is connected by USB to my PC using my home wi-fi for the tablet. It also works when the USB is disconnected from the tablet showing that the connection is by wi-fi. The programme did not work if I used the IPs "10.0.2.2" and "127.0.0.1" in either package. It also does not work if the tablet is not using the same wi-fi as the PC.