我需要实现一个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#应用程序不会显示从移动设备传输的字符串,如教程中所示。
我尝试过的修补程序是,
这些修复程序没有解决问题,我也不清楚如何做到这一点。我现在尝试了很多解决方案,因为我是tcp
编程领域的新手。
我非常感谢专家就如何解决这个问题提出建议。
你非常感谢:)
提前致谢。
PS
192.168.137.1
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): ==========
答案 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,它也不起作用。