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

如何在C#桌面应用程序和移动(android)设备之间通过本地网络进行通信?,c#,android,wcf,web-services,xamarin.android,C#,Android,Wcf,Web Services,Xamarin.android,我有一个C#(.NET3.5)桌面应用程序,可以在屏幕上打印出一些数字。现在,我想将其扩展到移动设备。(在我的例子中是Android设备。)它必须显示与电脑屏幕上相同的数字。整件事只是一个概念证明,它不必看起来漂亮,不必100%工作,有一个漂亮的GUI或简单的设置,它只需要显示一些数字 我一直在研究MonoDroid,因为它有可能使用WCF服务。(我知道移动设备和台式计算机将连接到同一个网络。)不幸的是,MonoDroid的试用版不支持真正的设备,我不想花几百美元来证明这一点 我有Java的基本

我有一个C#(.NET3.5)桌面应用程序,可以在屏幕上打印出一些数字。现在,我想将其扩展到移动设备。(在我的例子中是Android设备。)它必须显示与电脑屏幕上相同的数字。整件事只是一个概念证明,它不必看起来漂亮,不必100%工作,有一个漂亮的GUI或简单的设置,它只需要显示一些数字

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

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

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


或者有其他方法可以实现类似的功能吗?

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


只需设置您的WCF服务,以返回XML、JSON和您想要的任何内容;然后从“droid设备”点击它。

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

有一本关于这个主题的好书: . 看起来它甚至可以在线免费访问。

我使用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
返回响应


实现和调整非常简单。

因此,如果我将其设置为返回字符串(XML数据),我可以在我的web浏览器中打开页面,它应该可以工作?如果您的目标是通过浏览器访问,最好的方法是按照Mstersquonk的回答使用HttpListener。我在Android端使用HttpURLConnection,而不是浏览器。我在GET头中设置请求属性,比如“X-myapp-action”,它允许我控制“服务”的功能(返回文件、更改设置,几乎任何事情)。有一天我偶然发现了这个方法,它非常有用。非常好的id。我在几分钟内就在本地计算机上运行了它。只需要弄清楚为什么另一台计算机的连接还没有工作,而且几乎完成了。@tyfius:显然,您的“服务器”PC上的防火墙设置需要考虑监听您使用的任何端口,但除此之外,它非常简单。我在Android上使用HttpURLConnection,并在GET头中使用自定义请求属性来执行任何操作,从下载文件到向“服务器”发送自定义操作。它坚如磐石,非常灵活。很高兴能为您提供帮助。@Squonk:看起来不错,但您能分享一些链接/示例吗?如何从另一端(android端)使用它?我是说这种安卓的代码,它与上面的代码配合?