Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android套接字应用程序,套接字仅在第一次发送_Android_Sockets - Fatal编程技术网

android套接字应用程序,套接字仅在第一次发送

android套接字应用程序,套接字仅在第一次发送,android,sockets,Android,Sockets,我有一个android客户端,它监听智能手机的传感器,当它检测到传感器值的变化时,它会生成一个字符串(“命令”),并创建一个套接字和一个输出流,将该字符串发送到java服务器;每个传感器侦听器创建一个端口与其他侦听器不同的套接字。我还有一个“发送”按钮和一个文本框,用于向服务器发送任何其他字符串。问题是,虽然“发送”按钮工作正常,每次我按下它时都会发送文本框中写入的所有字符串,但每个侦听器只有在第一次检测到传感器值的变化时才会发送“命令” //listener buttonSend Button

我有一个android客户端,它监听智能手机的传感器,当它检测到传感器值的变化时,它会生成一个字符串(“命令”),并创建一个套接字和一个输出流,将该字符串发送到java服务器;每个传感器侦听器创建一个端口与其他侦听器不同的套接字。我还有一个“发送”按钮和一个文本框,用于向服务器发送任何其他字符串。问题是,虽然“发送”按钮工作正常,每次我按下它时都会发送文本框中写入的所有字符串,但每个侦听器只有在第一次检测到传感器值的变化时才会发送“命令”

//listener buttonSend
Button.OnClickListener buttonSendOnClickListener = new Button.OnClickListener()
{

    @Override
    public void onClick(View arg0) 
    {
        buttonSend.setEnabled(false);
        Socket socket = null;
        DataOutputStream dataOutputStream = null;
        DataInputStream dataInputStream = null;

        try 
        {
            socket = new Socket(IP, 32450);
            socket.setReuseAddress(true);
            socket.setSoTimeout(2000);
            dataOutputStream = new DataOutputStream(socket.getOutputStream());
            dataInputStream = new DataInputStream(socket.getInputStream());
            dataOutputStream.writeUTF(textOut.getText().toString());
            textIn.setText(dataInputStream.readUTF());
        } 
        catch (UnknownHostException e) 
        {
            e.printStackTrace();
            buttonSend.setEnabled(true);
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
            buttonSend.setEnabled(true);
        }
        finally
        {
            if (socket != null)
            {
                try 
                {
                    buttonSend.setEnabled(true);
                    socket.close();
                } 
                catch (IOException e) 
                {
                    e.printStackTrace();
                    buttonSend.setEnabled(true);
                }
            }

            if (dataOutputStream != null)
            {
                try 
                {
                    dataOutputStream.close();
                } 
                catch (IOException e) 
                {
                    e.printStackTrace();
                }
            }

            if (dataInputStream != null)
            {
                try 
                {
                    dataInputStream.close();
                } 
                catch (IOException e) 
                {
                    e.printStackTrace();
                }
            }
        }
    }
}; //End listener buttonSend
这是按钮,所有传感器都是这样工作的:

//proximity sensor event listener
SensorEventListener proximitySensorEventListener 
    = new SensorEventListener()
    {
        public void onAccuracyChanged(Sensor arg0, int arg1) 
        {
            // TODO Auto-generated method stub  
        }

        public void onSensorChanged(SensorEvent arg0) 
        {
            // TODO Auto-generated method stub              
            if(arg0.sensor.getType()==Sensor.TYPE_PROXIMITY && IP!="")
            {

                textProximitySensorData.setText("Proximity Sensor Value:" 
                        + String.valueOf(arg0.values[0]));

                String proxValue = "Proximity Sensor: VALUE " 
                        + String.valueOf(arg0.values[0]);
                if(buttonSend.isEnabled()==true){
                    Socket socket = null;
                    DataOutputStream dataOutputStream = null;
                    try 
                    {
                        socket = new Socket(IP, 32452);
                        socket.setReuseAddress(true);
                        socket.setSoTimeout(2000);
                        dataOutputStream = new DataOutputStream(socket.getOutputStream());
                        dataOutputStream.writeUTF(proxValue);
                    } 
                    catch (UnknownHostException e) 
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } 
                    catch (IOException e) 
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    finally
                    {
                        if (socket != null)
                        {
                            try 
                            {
                                socket.close();
                                socket=null;
                            }    
                            catch (IOException e) 
                            {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }

                        if (dataOutputStream != null)
                        {
                            try 
                            {
                                dataOutputStream.close();
                            } 
                            catch (IOException e) 
                            {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
    };

我尝试了setSoTimeout,但没有用,因为它只用于读取,而setReuseAddress不起作用,logcat和console在我运行应用程序时没有显示任何错误,你能帮我找到问题吗?

你试过几分钟调试你的代码以确保你的buttonSend.enabled()一路上财产没有被搞得乱七八糟吗?我注意到您的传感器侦听器仅在以下情况下发送(buttonSend.isEnabled()==true)。。。也许这不是真的?谢谢,我解决了这个问题,这是服务器的问题(服务器没有在服务器日志选项卡中打印命令..仍然不知道为什么,但其他一切都很好),无论如何,谢谢你已经试着调试代码几分钟,以确保你的buttonSend.enabled()一路上财产没有被搞得乱七八糟吗?我注意到您的传感器侦听器仅在以下情况下发送(buttonSend.isEnabled()==true)。。。也许这不是真的?谢谢我解决了这个问题,这是服务器的问题(服务器没有在服务器日志选项卡中打印命令…仍然不知道为什么,但其他一切都很好),无论如何,谢谢