0
我試圖使用手機爲我的筆記本電腦構建一個遠程控制器。 我編寫了一個運行在我的筆記本電腦上的服務器應用程序,遠程應用程序用作服務器應用程序的客戶端。 我想實現一個鼠標墊,問題是當我在「觸摸板」上移動手指的速度太快時,經過幾次迭代,我在服務器端收到讀取超時。一次接收頻繁請求時獲取套接字超時
服務器代碼 final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(20);
Runnable serverTask = new Runnable()
{
@Override
public void run()
{
ServerSocket serverSocket = null;
try
{
serverSocket = new ServerSocket(DEFAULT_PORT);
serverSocket.setReuseAddress(true);
_working = true;
while (_working)
{
Socket clientSocket = serverSocket.accept();
clientSocket.setSoTimeout(10000);
clientProcessingPool.submit(new ClientTask(clientSocket));
}
}
catch (IOException e)
{
System.err.println("Unable to process client request");
e.printStackTrace();
}
finally
{
try
{
if (serverSocket != null)
{
serverSocket.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
};
Thread serverThread = new Thread(serverTask);
serverThread.start();
private class ClientTask implements Runnable
{
private final Socket clientSocket;
private ClientTask(Socket clientSocket)
{
this.clientSocket = clientSocket;
}
@Override
public void run()
{
System.out.println("Got a client !");
try
{
System.out.println("Connected!");
DataOutputStream dOut = new DataOutputStream(clientSocket.getOutputStream());
DataInputStream dIn = new DataInputStream(clientSocket.getInputStream());
String request = dIn.readUTF();
parseRequest(request);
System.out.println("request=" + request);
dOut.writeUTF("Got the command");
dOut.flush(); // Send off the data
dIn.close();
dOut.close();
clientSocket.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
我想也許我將發送請求僅當從起始位置到終止位置的距離比工序(一個常數),然後才發送請求更大。但我認爲老鼠不會流暢地移動。
謝謝。
我是否還需要使用RXAndroid或只是RXJava,你也可以解釋這個庫如何幫助我解決我的問題嗎? –
https://www.youtube.com/watch?v=k3D0cWyNno4本視頻很好地解釋了您可以將這些庫用於此目的的方式。你應該使用兩者來使它更容易 –