Android保持套接字连接在线程上打开

时间:2017-09-16 19:24:26

标签: java android multithreading sockets

谢谢你的帮助。

我正在尝试通过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();
}

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

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

非常感谢任何输入。

谢谢!

1 个答案:

答案 0 :(得分:1)

os.writeBytes(dataString +“\ n”)之后的

os.flush();