【问题标题】:Android: continuous socket writeAndroid:连续套接字写入
【发布时间】:2012-02-06 02:42:47
【问题描述】:

我是 Java 和 Android 编程的新手,但有一个项目要求我这样做。

应用程序将字节发送到服务器,该服务器接收发送给它的所有信息并执行等效命令。客户端和服务器在一个专有链接中,所以我不会担心安全问题。

public class NetworkTask extends AsyncTask<Void, byte[], Boolean> {
    OutputStream dataOut; //Network Output Stream

    @Override
    protected void onPreExecute() {
        Log.i("AsyncTask", "onPreExecute");
    }

    @Override
    protected Boolean doInBackground(Void... params) {

        boolean result = false;

        while (sendData) { //While Boolean sendData is true

            try {
                gsocket = new Socket(roubotIP, roubotPort);

                byte[] data = EncodingUtils.getAsciiBytes(outData);

                Log.i("Data: ", outData);
                dataOut = new DataOutputStream(gsocket.getOutputStream());

                dataOut.write(data);

            } catch (UnknownHostException e) {
                Log.i("Socket: ","Unkown host");
                e.printStackTrace();
                result = true;
            } catch (IOException e) {
                e.printStackTrace();
                result = true;
            } catch (Exception e) {
                e.printStackTrace();
                result = true;
            }
        }

        try {
            dataOut.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }
}

使用上面的代码,我能够建立与服务器的连接,但数据仅每 1-2 秒发送/写入到套接字。

有没有办法连续执行此操作?或以最小的延迟(大约 0.5 秒或更短?)

电池寿命对我来说不是问题,我接受持续激活的插座有其缺点。

谢谢。

【问题讨论】:

  • 好吧,我的 java 生锈了,但在我看来,您每次通过循环都在创建一个新套接字,我认为 不是 你想要的肯定会消耗时间.
  • @Duck,我也试过这样做:dl.dropbox.com/u/22027127/helpv2.txt 但字节只发送/写入服务器一次。

标签: java android sockets


【解决方案1】:
  1. 您在“while”块中创建多个套接字
  2. 在第二个链接上,您也在“while”块中创建多个输出流

尝试这样做:

public class NetworkTask extends AsyncTask<Void, byte[], Boolean> {
    OutputStream dataOut; //Network Output Stream

    @Override
    protected void onPreExecute() {
        Log.i("AsyncTask", "onPreExecute");
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        try {
            gsocket = new Socket(roubotIP, roubotPort);
            dataOut = new DataOutputStream(gsocket.getOutputStream());
        } catch (UnknownHostException e) {
            Log.i("Socket: ","Unkown host");
            e.printStackTrace();
            return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        while (sendData) { //While Boolean sendData is true
            try {
                byte[] data = EncodingUtils.getAsciiBytes(outData);
                Log.i("Data: ", outData);
                dataOut.write(data);
                dataOut.flush();
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        try {
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2014-08-25
    相关资源
    最近更新 更多