通过局域网连接Android应用程序到PC应用程序

本文关键字:应用程序 PC Android 连接 局域网 | 更新日期: 2023-09-27 18:15:58

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

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

示例场景:我正在Android手机上运行一款游戏,屏幕上有蜘蛛在爬行。当我按下电脑上的空格键时,我希望所有的蜘蛛都被赶走。

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

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

我喜欢一些简单的代码,例如,打开我的PC和我的设备之间的直接连接,允许我发送字节流(例如,我的PC可以发送字符串"空格键被按下")。

我对网络知之甚少,希望能得到简单的解释。

通过局域网连接Android应用程序到PC应用程序

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

例子:

服务器(移动端)

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();
        }
    }
}

和客户端(PC - c#)

class ClientThread implements Runnable 
{   
    public void run() 
    {
        try 
        {
            Socket socket = new Socket(serverIpAddress, serverPort);
            socket.setSoTimeout(5000);
            while (true) 
            {
                try 
                {
                    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                    Log.d("Nicklas", "Out it goes");
                    out.println(Command);
                    if (Command == "CMD:GetOptions<EOF>")
                    {
                        Log.d("Nicklas", "Getting options");
                        try
                        {
                            Log.d("Nicklas", "Line 1");
                            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                            Log.d("Nicklas", "Line 2");
                            String answer = in.readLine();
                            Log.d("Nicklas", "answerswer = " + answer );
                        }
                        catch (Exception ee)
                        {
                            Log.d("Nicklasasasas", ee.toString());
                        }
                    }
                    break;
                } 
                catch (Exception e) 
                {
                    Log.d("Nicklas", "CAE = " + e.toString());
                    break;
                } 
            }
            socket.close();
        } 
        catch (ConnectException ee)
        {
            Log.d("Nicklas", "Kunne ikke forbinde");
        }
        catch (Exception e) 
        {
            Log.d("Nicklasssssss", e.toString());
        }
    }
}
相关文章: