【问题标题】:Server(Java)&Client(Android) remote connection delayServer(Java)&Client(Android)远程连接延迟
【发布时间】:2014-04-06 03:54:13
【问题描述】:

我一周前开发了远程鼠标。我测试了很多,但我无法解决与操作系统相关的神秘问题。 (Remote app, Difference of speed between Win7 and Win8)

所以我正在使用我编写的简单代码测试 PC 和 Android 之间的远程连接。 (请看下面的代码和结果。)它们之间有一点延迟时间(大约200ms)。我想这就是为什么我觉得我的鼠标移动很慢。所以我想缩小差距。请给我任何办法。而且我想知道这是否只发生在 win 7 中。当我尝试使用 win 8 时,差距很小。

如果有任何帮助,我将不胜感激。感谢阅读:)

客户端:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Touch = (TextView) findViewById(R.id.Touch);
    BtnCnt = (Button) findViewById(R.id.BtnConnect);

    Touch.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent me) {
            try {
                c = Calendar.getInstance();
                hour = c.get(Calendar.HOUR);
                minute = c.get(Calendar.MINUTE);
                second = c.get(Calendar.SECOND);
                msecond = c.get(Calendar.MILLISECOND);

                String CurTime = "(Android)" + hour + ":" + minute + ":"
                        + second + ":" + msecond;

                Touch.setText(CurTime);
                dos.writeUTF(CurTime);
                dos.flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return true;
        }
    });

    BtnCnt.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

            Touch.setText("Connecting...");

            Thread T1 = new Thread(new Runnable() {
                public void run() {
                    try {
                        socket = new Socket(IP, PORT);
                        dos = new DataOutputStrea(socket.getOutputStream());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });

            T1.start();
        }
    });
}

服务器端:

try {
    ss = new ServerSocket(PORT);
    System.out.println("Server starts...");
    s = ss.accept();

    if (s.isConnected()) {
        System.out.println("Client is connected.");
        dis = new DataInputStream(s.getInputStream());
        while (true) {
            c = Calendar.getInstance();
            c.getTime();
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SSS");
            data = dis.readUTF();
            System.out.println("(Java)" + sdf.format(c.getTime())
                    + " - " + data);
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}

结果:

(Java)12:24:04:693 - (Android)0:24:4:319
(Java)12:24:04:693 - (Android)0:24:4:342
(Java)12:24:04:693 - (Android)0:24:4:351
(Java)12:24:04:693 - (Android)0:24:4:369
(Java)12:24:04:694 - (Android)0:24:4:386
(Java)12:24:04:694 - (Android)0:24:4:403
(Java)12:24:04:694 - (Android)0:24:4:421

= Java 接收时间 - Android 发送时间

【问题讨论】:

    标签: java android remote-control remote-connections


    【解决方案1】:

    我不明白你为什么要在每次线程运行迭代中创建一个套接字 在此范围内,您正在为每个线程中的每次运行调用创建一个套接字,该线程是可数的。 我认为一段时间后线程工作延迟时间会增加。

     Thread T1 = new Thread(new Runnable() {
                public void run() {
                    try {
                        socket = new Socket(IP, PORT);
                        dos = new DataOutputStrea(socket.getOutputStream());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
    

    我认为你应该有一个单独的套接字并将此套接字上的流发送到服务器,而不是这些东西。

    更新:

    另一种方法是使用 REST 来做到这一点,我正在使用 Volley 它是一个很棒、甜美且简单的 REST 框架。它由 google 创建

    【讨论】:

    • 那是因为android的主线程无法连接服务器的socket。我只是单击了一次连接按钮。
    • 我是吗?我从未听说过 REST 框架,但我想知道。请给我一些信息或链接。 :)
    • REST 无处不在,GET、POST PUT 都是休息方法。所以我强烈建议你使用 [volley] captechconsulting.com/blog/clinton-teegarden/…
    • 有趣!谢谢你。从今天开始,我会做所有事情,周末我会告诉你结果。再次感谢您。
    猜你喜欢
    • 2017-10-10
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多