gpt4 book ai didi

java - android 屏幕作为内联网中的 pc 触摸板

转载 作者:太空狗 更新时间:2023-10-29 12:54:21 27 4
gpt4 key购买 nike

我想在内网中将android屏幕用作pc触摸板,所以对于我应该使用哪种协议(protocol)以及如何在 java 中创建 pc 服务器。

帮帮我。谢谢

最佳答案

它非常易于使用。在您的 Intranet 中使用 UDP 进行连接,因为它更快、无连接,因此无需刷新缓冲区并等待传输。您的应用程序应该实时运行,因此您需要 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);
}
}

关于java - android 屏幕作为内联网中的 pc 触摸板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8427297/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com