安卓屏幕作为内部网的pc触摸板

时间:2011-12-08 06:55:22

标签: java android protocols

我想在内网中使用android屏幕作为pc触控板, 所以我应该使用哪种协议以及如何在java中创建pc服务器。

帮帮我。 谢谢

1 个答案:

答案 0 :(得分:3)

它非常易于使用。使用UDP在Intranet中进行连接,因为它更快,无连接,因此无需刷新缓冲区并等待传输。您的应用程序应该实时运行,因此您需要UDP套接字连接。

在服务器端java中,只需创建一个带有端口号的数据报包服务器。仅使用字节流来加快连接速度。

共享示例代码。这里我使用了8字节的数据包大小:

public class Server extends Thread
{

LinkedList<String[]> queue = new LinkedList<String[]>();

public static void main(String[] args)
{
    new Server().start();

}


@Override
public void run()
{
    try
    {
        int server_port = 12345;
        byte[] message = new byte[8];



        DatagramPacket p = new DatagramPacket(message, message.length);
        DatagramSocket s = new DatagramSocket(server_port);

        Robot r = new Robot();

        PointerInfo a = MouseInfo.getPointerInfo();
        Point b = a.getLocation();

        int curx = (int) b.getX();
        int cury = (int) b.getY();
        int prex = 0;
        int prey = 0;
        while (true)
        {
            p = new DatagramPacket(message, 8);
            s.receive(p);
            System.out.println(p.getAddress());
            int x = byteArrayToInt1(message);
            int y = byteArrayToInt2(message);

            if (x == 0 && y == 0)
            {
                prex = 0;
                prey = 0;

                a = MouseInfo.getPointerInfo();
                b = a.getLocation();

                curx = (int) b.getX();
                cury = (int) b.getY();

                r.mouseMove(curx, cury);
            }
            else
            {
                curx = curx - (prex - x);
                cury = cury - (prey - y);

                r.mouseMove(curx, cury);

                prex = x;
                prey = y;
            }


        }

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

}

//use reverse of this logic in your android to convert co-ordinate int to byte[]
public static final int byteArrayToInt1(byte[] b)
{
    return (b[0] << 24)
            + ((b[1] & 0xFF) << 16)
            + ((b[2] & 0xFF) << 8)
            + (b[3] & 0xFF);
}

public static final int byteArrayToInt2(byte[] b)
{
    return (b[4] << 24)
            + ((b[5] & 0xFF) << 16)
            + ((b[6] & 0xFF) << 8)
            + (b[7] & 0xFF);
    }
}