通过LAN将Android应用程序连接到PC应用程序

时间:2015-10-04 05:04:08

标签: c# android networking lan

我在Android设备上通过视频游戏环境(Unity,基本上是C#库)运行应用程序。我希望这个应用程序响应来自我的PC的命令(最好是运行Windows 8,但可以是Linux:Ubuntu,如果更容易)。设备和PC位于同一LAN上,但未通过物理电缆连接。我需要设备在发出命令后的0.5秒内响应来自PC的命令。

问题:在我的电脑和设备之间建立这种连接的最简单(概念和实际)方法是什么?

示例场景:我在Android手机上运行游戏,蜘蛛在屏幕上爬行。当我在电脑上打空间时,我希望所有的蜘蛛都被打掉。

当前的解决方案:创建一个ruby-on-rails网站&数据库。在PC上输入命令时,将使用该命令更新数据库。设备每隔0.5秒检查数据库上的时间戳并提取任何新命令。这个解决方案是次优的,因为我不知道ruby(我愿意学习它,但我想要一个更简单的解决方案)。

我应该使用C#套接字吗?

我会喜欢一些简单的代码,例如,我会在我的PC和设备之间建立直接连接,这将允许我发送字节流(例如,我的PC可以发送字符串“空格键被按下”)。

我对网络非常缺乏教育,并且会赞赏简单的解释。

1 个答案:

答案 0 :(得分:2)

与pc和mobile通信的最佳方式是一个简单的套接字。 在特定端口号的一侧创建服务器套接字,并从另一端连接。 它非常快(甚至不到0.1秒)

示例:

服务器(移动端)

angular
    .module('app', [])
    .factory('Calculator', function () {
        return function () {
            return Math.random();
        }
    });`

和客户端(PC - C#)

public class Provider{
    ServerSocket providerSocket;
    Socket connection = null;
    ObjectOutputStream out;
    ObjectInputStream in;
    String message;
    Provider(){}
    void run()
    {
        try{
            //1. creating a server socket
            providerSocket = new ServerSocket(2004, 10);
            //2. Wait for connection
            System.out.println("Waiting for connection");
            connection = providerSocket.accept();
            System.out.println("Connection received from " + connection.getInetAddress().getHostName());
            //3. get Input and Output streams
            out = new ObjectOutputStream(connection.getOutputStream());
            out.flush();
            in = new ObjectInputStream(connection.getInputStream());
            sendMessage("Connection successful");
            //4. The two parts communicate via the input and output streams
            do{
                try{
                    message = (String)in.readObject();
                    System.out.println("client>" + message);
                    if (message.equals("bye"))
                        sendMessage("bye");
                }
                catch(ClassNotFoundException classnot){
                    System.err.println("Data received in unknown format");
                }
            }while(!message.equals("bye"));
        }
        catch(IOException ioException){
            ioException.printStackTrace();
        }
        finally{
            //4: Closing connection
            try{
                in.close();
                out.close();
                providerSocket.close();
            }
            catch(IOException ioException){
                ioException.printStackTrace();
            }
        }
    }
    void sendMessage(String msg)
    {
        try{
            out.writeObject(msg);
            out.flush();
            System.out.println("server>" + msg);
        }
        catch(IOException ioException){
            ioException.printStackTrace();
        }
    }
    public static void main(String args[])
    {
        Provider server = new Provider();
        while(true){
            server.run();
        }
    }
}

上面的示例代码是从此SO和此SO个帖子中复制的。