我想在内网中使用android屏幕作为pc触控板, 所以我应该使用哪种协议以及如何在java中创建pc服务器。
帮帮我。 谢谢
答案 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);
}
}