创建本地服务器并向Android设备提供数据

时间:2016-06-29 12:38:29

标签: c# android localserver

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

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

我实际上计划使用Xamarin在跨平台上执行此操作,但我有疑问。例如,如果我想为Android和IOS做应用程序,那么我只编写一次代码,可以在Android和IOS中使用?如果是,那么UI设计呢?

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

2 个答案:

答案 0 :(得分:1)

使用C#来托管RESTFUL service肯定是可行的,但有时会过度使用。

您可以使用节点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还是浏览器请求它,都会得到相同的响应。

答案 1 :(得分:1)

您可以使用Http服务器的URL Connection服务器的形式,C# TcpListener StreamReader您可以StreamWriter使用服务器Printwriter并使用{ {1}}阅读请求, 回复。如果你在java中这样做,那么你可以使用

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();
            }
        }
    }
}
作为服务器,因为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(); } } } }

127.0.0.1 修改:   因此,如果你想尝试连接url是你的服务器ip和端口在这种情况下使用1302所以如果你的IP是http://127.0.0.1:1302/你的网址是(progn (calc) (calc-hyperbolic) (calc-eval "[8.66e10 = r * v, -7.51e6 = 0.5*v^2 - 6.67e-11*6e24/r]" 'push) (calc-solve-for "[r,v]") (calc-eval -1 'push) ; value for variable s2 (calc-let 'var-s2) ; right name of variable s2 (print (calc-eval 1 'top)) (calc-quit)) 请注意它也可以从你的Android访问浏览器和你应该授予C#服务器防火墙权限。