【问题标题】:Android keep socket connection open on threadAndroid在线程上保持套接字连接打开
【发布时间】:2018-02-25 17:07:39
【问题描述】:

感谢您的帮助。

我正在尝试通过 TCP 套接字将传感器数据从我的 android 设备流式传输到服务器。我对 Android 还很陌生,线程对我来说是一个很难掌握的概念。

我有两个方法,connectToServer() 和 sendDataToServer()。 connectToServer() 在启动时被调用一次,而 sendDataToSever() 在大约 100 HZ 时被一遍又一遍地调用。 我想在 connectToServer() 处打开套接字并使其始终保持打开状态,以便 sendDataToServer() 可以在该套接字上重复发送数据。

public static void connectToServer(){
    sendThread = new Thread(new Runnable() {
        public void run() {
            mySocket = null;
            os = null;
            try {
                mySocket = new Socket(PC_IP, PORT);
                os = new DataOutputStream(mySocket.getOutputStream());
            } catch (UnknownHostException exception) {
                Log.d("sunnyDay", exception.getMessage());
            } catch (IOException exception) {
                Log.d("sunnyDay", exception.getMessage());
            }
        }
    });
    sendThread.start();
}


public static void sendDataToServer(byte[] data) {

    String dataString = Arrays.toString(data);

    // send this String to the server
    sendThread = new Thread(new Runnable() {
        public void run() {
            if (mySocket != null && os != null) {
                try {
                    os.writeBytes(dataString + "\n");
                }  catch (IOException exception) {
                    Log.d("sunnyDay", exception.getMessage());
                }
            }
        }
    });
    sendThread.start();
}

我能够重复发送数据的唯一方法是每次在同一个线程调用中关闭和重新打开套接字,尽管我觉得这不是解决方案。

我试图将它们都放在同一个线程上,以便套接字连接仍然存在,我假设这是我缺少线程的地方。

非常感谢任何输入。

谢谢!

【问题讨论】:

标签: java android multithreading sockets


【解决方案1】:

os.writeBytes(dataString + "\n") 之后的os.flush();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2013-04-19
    • 1970-01-01
    相关资源
    最近更新 更多