Android到PC的TCP通信仅在仿真器上工作

时间:2014-05-29 06:54:24

标签: c# android tcp ip loopback-address

我需要实现一个Android应用程序,通过c#(wifi)与PC上的TCP应用程序进行通信。我跟着这个 -

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

实施使用eneter库的解决方案的教程。

这在模拟器上工作得很好,因为用于C#应用程序的IP是

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

用于Android应用的IP是

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

但是,当我将Android应用程序转移到实际设备并尝试通过wifi传输数据时,C#应用程序不会显示从移动设备传输的字符串,如教程中所示。

我尝试过的修补程序是,

  • 按原样保存C#IP(127.0.0.1)并将android IP更改为运行c#app的PC的IP(192.168.137.1)。
  • 有效的修复:将C#IP更改为PC的实际IP(192.168.137.1),并将Android应用的IP地址更改为Android设备的实际IP(192.168.137.1) )。
  • 仅供参考:我没有更改端口号

这些修复程序没有解决问题,我也不清楚如何做到这一点。我现在尝试了很多解决方案,因为我是tcp编程领域的新手。

我非常感谢专家就如何解决这个问题提出建议。

你非常感谢:)

提前致谢。

PS

  • PC的实际IP(使用C#程序) - 192.168.137.1
  • Android设备的实际IP(使用Android应用) - 192.168.137.14

Logcat输出

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 个答案:

答案 0 :(得分:0)

应将Windows防火墙配置为允许该连接或关闭。

答案 1 :(得分:0)

回答这篇文章有点晚了,但我已经设法通过这个项目在我的PC和平板电脑之间进行通信。 我尝试了很多IP地址组合,发现只有当PC NetService(c#)和Android Communication Client中的IP地址相同并由我自己的网络IP地址定义时才能工作。下面给出的例子中的“192.168.1.155”: 即。在c#NetService程序中:

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

并在Android客户端程序中:

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

当平板电脑通过USB连接到我的电脑时,程序的工作原理与平板电脑的家用Wi-Fi连接。 它也可以在USB与平板电脑断开连接时显示连接是通过Wi-Fi进行的。 如果我在任一包中使用IP“10.0.2.2”和“127.0.0.1”,该程序就无法运行。 如果平板电脑没有使用与PC相同的Wi-Fi,它也不起作用。