套接字编程:延迟

时间:2016-04-18 10:36:08

标签: java c# android sockets

我有一个用C#编写的Windows服务器应用程序。我有一个Android的客户端应用程序。我想在无限循环中从客户端连续发送数据到服务器。数据正在发送但有时会出现延迟。我真的坚持了下来。这是我的客户端代码:

new Thread(new Runnable() {
        public void run() {
            Socket socket = null;
            PrintWriter out = null;
            while(true) {
                try {
                    socket = new Socket(IP, PORT);
                    out = new PrintWriter(socket.getOutputStream(), true);
                    out.println(msg);
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();

知道为什么会有延迟?

2 个答案:

答案 0 :(得分:2)

您的问题是您在while循环的每次迭代中初始化套接字。

new Thread(new Runnable() {
    public void run() {
        Socket socket = null;
        PrintWriter out = null;
        while(true) {
            try {
                socket = new Socket(IP, PORT);
                out = new PrintWriter(socket.getOutputStream(), true);
                out.println(msg);
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}).start();

将其重构为循环,如下所示:

new Thread(new Runnable() {
    public void run() {
        Socket socket = new Socket(IP, PORT);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        while(true) {
            try {
                out.println(msg);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        socket.close();
    }
}).start();

除非是设计,在这种情况下,为什么?

答案 1 :(得分:0)

似乎代码是正确的。滞后不仅可能由应用程序引起,还可能由网络状态引起。

尝试从两个设备ping路由器,看看是否由于无线连接而出现滞后尖峰。如果您看到ping中存在高延迟,则问题出在连接中,而不是应用程序中。