0

我需要实现一个android应用程序以通过(wifi)与c#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 应用程序传输到实际设备并尝试通过wifiC# 应用程序传输数据时,不会显示从移动设备传输的字符串,如教程中所示。

我尝试的修复是,

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

这些修复没有解决问题,我不知道如何做到这一点。因为我是编程领域的新手,所以几天来我尝试了许多解决方案tcp

我非常感谢您提供有关如何解决此问题的专家建议。

非常感谢您的帮助:)

提前致谢。

附言

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

日志输出

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): ==========
4

2 回答 2

0

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

于 2014-05-29T09:01:12.753 回答
0

回答这篇文章有点晚了,但我已经设法使用这个项目在我的电脑和平板电脑之间进行通信。我尝试了多种 IP 地址组合,发现它仅在 PC NetService (c#) 和 Android 通信客户端中的 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 连接到我的 PC 并使用平板电脑的家庭 wi-fi 时,该程序的工作原理如文章中所述。当 USB 与平板电脑断开连接显示连接是通过 wi-fi 时,它也可以工作。如果我在任一包中使用 IP“10.0.2.2”和“127.0.0.1”,该程序将无法运行。如果平板电脑没有使用与 PC 相同的 wi-fi,它也不起作用。

于 2015-12-18T14:19:10.800 回答