0

我打算在计算机中制作本地服务器。任何连接到此本地服务器的 Android 设备都可以从计算机请求数据。

但是,我缺乏如何实现它的概念。对于本地服务器,我打算用C#来做,但它只是做一个SQL数据库吗?如果是,那么 Android 应用程序如何从本地服务器请求数据?对于 Android 应用,用于请求数据的 API 是什么?我对 C# 和 Android 都有一些经验。

我实际上计划使用 Xamarin 在跨平台中执行此操作,但我有疑问。比如我想做安卓和IOS的app,那我只写一次代码就可以在安卓和IOS上使用吗?如果是,那么 UI 设计如何?

我知道问这个问题太笼统了,不想在这里问,但我真的在网上找不到答案。我只是希望任何人都可以简要地告诉我实现它的步骤/工具或一些重要的术语/概念,以便我可以进一步研究。非常感谢。

4

2 回答 2

2

使用 C# 来托管您的RESTFUL 服务当然是可行的,但有时会有些矫枉过正。

您可能会在一两分钟内使用 node js 设置所有内容:

//Server.js
//Lets require/import the HTTP module
var http = require('http');
//Lets define a port we want to listen to
const PORT=8080; 
//We need a function which handles requests and send response
function handleRequest(request, response){
    response.end('It Works!! Path Hit: ' + request.url);
}

//Create a server
var server = http.createServer(handleRequest);
//Lets start our server
server.listen(PORT, function(){
//Callback triggered when server is successfully listening. Hurray!
console.log("Server listening on: http://localhost:%s", PORT);
});

现在运行这个 JavaScript 来启动你的 web 服务:

> node Server.js

然后尝试在浏览器中访问此服务以查看结果!这就对了!

请注意,一旦您定义了此类 Web 服务,无论您是通过 Android 还是浏览器请求它,您都会得到相同的响应。

于 2016-06-29T12:44:34.823 回答
2

您可以以Http服务器的形式执行此操作,Android 设备可以连接到该服务器URL ConnectionC#您可以将其TcpListener用于服务器并用于StreamReader读取请求和StreamWriter回复。如果您在 java 中执行此操作,那么您可以使用Printwriter更容易的服务器,因为 java 是 android 的一部分。
C# 服务器代码

using System;
using System.IO;
using System.Net.Sockets;
using System.Web;

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {

            TcpListener listener = new TcpListener(1302);
            listener.Start();
            while (true)
            {
                Console.WriteLine("Waiting for connection");
                TcpClient client = listener.AcceptTcpClient();
                StreamReader sr = new StreamReader(client.GetStream());
                StreamWriter sw = new StreamWriter(client.GetStream());
                try
                {
                    //client request
                    string request = sr.ReadLine();
                    Console.WriteLine(request);
                    string[] tokens = request.Split(' ');

                    string reply= tokens[1];
                    if (reply == "/")
                    {
                        reply = "Welcome";
                    }
                    //Handle request


                    sw.WriteLine("HTTP/1.0 200 OK\n");
                    string data = "You can handle request this way";
                        sw.WriteLine(data);
                        sw.Flush();



                }catch(Exception ex)
                {
                    //error\
                    sw.WriteLine("HTTP/1.0 404 OK\n");
                    sw.WriteLine("ERROR");
                }
                client.Close();
            }
        }
    }
}

编辑: 所以如果你想尝试连接 url 是你的服务器 ip 和端口在这种情况下使用 1302 所以如果你的 ip 是127.0.0.1你的 urlhttp://127.0.0.1:1302/请注意它也可以从你的 android 浏览器访问并且你的 C# 服务器应该被授予防火墙权限。

于 2016-06-29T13:00:05.817 回答