android套接字应用程序,套接字仅在第一次发送
我有一个android客户端,它监听智能手机的传感器,当它检测到传感器值的变化时,它会生成一个字符串(“命令”),并创建一个套接字和一个输出流,将该字符串发送到java服务器;每个传感器侦听器创建一个端口与其他侦听器不同的套接字。我还有一个“发送”按钮和一个文本框,用于向服务器发送任何其他字符串。问题是,虽然“发送”按钮工作正常,每次我按下它时都会发送文本框中写入的所有字符串,但每个侦听器只有在第一次检测到传感器值的变化时才会发送“命令”android套接字应用程序,套接字仅在第一次发送,android,sockets,Android,Sockets,我有一个android客户端,它监听智能手机的传感器,当它检测到传感器值的变化时,它会生成一个字符串(“命令”),并创建一个套接字和一个输出流,将该字符串发送到java服务器;每个传感器侦听器创建一个端口与其他侦听器不同的套接字。我还有一个“发送”按钮和一个文本框,用于向服务器发送任何其他字符串。问题是,虽然“发送”按钮工作正常,每次我按下它时都会发送文本框中写入的所有字符串,但每个侦听器只有在第一次检测到传感器值的变化时才会发送“命令” //listener buttonSend Button
//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)。。。也许这不是真的?谢谢我解决了这个问题,这是服务器的问题(服务器没有在服务器日志选项卡中打印命令…仍然不知道为什么,但其他一切都很好),无论如何,谢谢