如何在 C# 桌面应用程序和移动(android)设备之间通过本地网络进行通信? [关闭]

Posted

技术标签:

【中文标题】如何在 C# 桌面应用程序和移动(android)设备之间通过本地网络进行通信? [关闭]【英文标题】:How to communicate over local network between C# desktop application and mobile (android) device? [closed] 【发布时间】:2011-08-06 22:57:03 【问题描述】:

我有一个 C# (.net 3.5) 桌面应用程序,可以在屏幕上打印出一些数字。现在我想将其扩展到移动设备。 (在我的情况下是 android 设备。)它必须显示与计算机屏幕上相同的数字。整个事情只是一个概念证明,它不需要看起来很漂亮,它不需要 100% 工作,有一个漂亮的 GUI 或简单的设置,它只需要显示一些数字。

我一直在研究 MonoDroid,因为它有可能使用 WCF 服务。 (我知道移动设备和台式电脑将连接到同一个网络。)不幸的是,MonoDroid 的试用版不支持真实设备,我不想花几百块钱来证明一点。

我具备 Java 的基本知识,并且我认为我能够使用 Android SDK 快速开发一个示例应用程序,以从网络上的网页获取数据、解释它(XML、JSON 等)并显示它在屏幕上。

所以我的问题变成了:是否有可能从现有应用程序中创建某种 Web 服务(无需设置整个 IIS 服务器),其中包含一个带有一些 XML 数据的网页,我可以在给定的时间刷新这些数据间隔并且可以从同一网络上的计算机访问?我该怎么做,使用哪种技术?

或者有其他方法可以实现这样的目标吗?

【问题讨论】:

【参考方案1】:

我使用 C# HttpListener 如下...

private void CreateListener

    HttpListener listener = null;
    HttpListenerContext context = null;
    HttpListenerRequest request = null;
    HttpListenerResponse response = null;
    string PortNumber = "9876";
    string requestUrl;
    Boolean listen = false;

    try
    
        if (listener == null)
        
            listener = new HttpListener();
            listener.Prefixes.Add("http://*:" + PortNumber + "/");
            listener.Start();
            listen = true;
            while (listen)
            
                try
                
                    context = listener.GetContext();
                
                catch (Exception e)
                
                    listen = false;
                
                if (listen)
                
                    request = context.Request;
                    requestUrl = request.Url.ToString();

                    // Process request and/or request Url
                
            
        
    

基本上listener.GetContext(); 会阻塞,直到收到 HTTP 请求。然后,您可以使用request = context.Request 检索 HTTP 请求数据并进行处理。然后您可以使用context.Response 来返回响应。

实施和调整相当简单。

【讨论】:

优秀的身份证。我在几分钟内就可以在我的本地计算机上运行它。只需要弄清楚为什么来自另一台计算机的连接还没有工作并且几乎完成了。 @tyfius:显然,您的“服务器”PC 上的防火墙设置需要考虑监听您使用的任何端口,但除此之外它非常简单。我在 Android 中使用 HttpURLConnection 并在 GET 标头中使用自定义请求属性来执行从下载文件到将自定义操作发送到“服务器”的任何操作。它坚如磐石,非常灵活。很高兴能帮上忙。 @Squonk:看起来不错,但你能分享一些链接/示例如何从另一端(android 端)使用它吗?我是说这种android的代码,和上面的代码配合的?【参考方案2】:

您可以在桌面上自行托管 WCF 服务服务(也就是说,将其托管在您的应用程序中,而不是通过 IIS)。这相对容易做到。

http://msdn.microsoft.com/en-us/library/ms731758.aspx

只需将您的 WCF 服务设置为返回 XML、JSON 等任何您想要的;然后从“机器人设备”中点击它。

【讨论】:

那么,如果我将它设置为返回一个字符串(XML 数据),我可以在我的网络浏览器中打开该页面,它应该可以工作吗? 如果您的目标是通过浏览器访问,最好的方法是按照 MisterSquonk 的回答使用 HttpListener。 我在 Android 端使用 HttpURLConnection 而不是浏览器。我在 GET 标头中设置请求属性,例如“X-myapp-action”,它允许我控制“服务”的功能(返回文件、更改设置,几乎任何事情)。有一天我偶然发现了这种方法,它非常有用。【参考方案3】:

您可以构建一个使用网络技术的 android 应用程序:html、CSS、javascript - 本质上它就像显示一个网页,但您用一个应用程序封装它。然后,您可以在网络上从您的 PC 向它提供数据的想法运行,但不需要真正使用 Android SDK 和 Java。

O'Reilly 有一本关于这个主题的好书: Building Android Apps with HTML, CSS, and JavaScript。看起来它甚至可以免费在线访问。

【讨论】:

以上是关于如何在 C# 桌面应用程序和移动(android)设备之间通过本地网络进行通信? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

您如何在桌面和移动 Chrome 用户代理之间进行检测?

firefox 怎样调试android页面

Flutter 中用于 Web、移动和桌面应用程序的视频播放器?

如何使用 C# 为 Windows 构建 AIR 本机扩展?

如何将 opencv c++ 代码集成到使用 c# 以统一 3D 开发的移动应用程序中

如何在不丢失 css 的情况下将模板从桌面发送到移动设备