我是在控制界面的oncreate里面实现按钮,通过按钮里面设置Send_CMD_Status 和要发送的指令CmdBuffer ,按下时进入连接服务器和发送命令。 以下的线程是在控制界面里单独运行的。发现前几次按下按钮,可以连接成功。
后面多按几次后,到后面都会停留在红色地区,也就是new socket()处,阻塞在此处Log.e("My", "尝试连接");。
我想的解决办法是:是要把new socket() 和socket.close()放到oncreate方法中。这样就不会频繁的连接和断开服务器。
public void onCreate(Bundle savedInstanceState)
{
mThreadClient = new Thread(mRunnable);
mThreadClient.start();
按键监听{down:Send_CMD_Status=-1;
up:Send_CMD_Status=1;}
}
private Runnable mRunnable = new Runnable() {
public void run()
{
while(true)
{ //continue。如果Send_CMD_Status==0,发送命令标志位,重新执行循环,也就是不发送命令 music
if(Send_CMD_Status==0)
{
try
{
Thread.sleep(50);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
continue;
}
if(Send_CMD_Status>0) Send_CMD_Status--;
try
{
//连接服务器
Log.e("My", "尝试连接");
mSocketClient = new Socket(CtrlIp,Integer.parseInt(CtrlPort));
Log.e("My", "连接成功");
mSocketClient.getOutputStream().write(CmdBuffer);//发送命令
mSocketClient.close();
Thread.sleep(100);
}
catch (Exception ex)
{ Log.e("My", "连接失败");
mSocketClient = null;
}
}
或者有什么办法让指令可以每次成功发送,也不会阻塞在连接服务端上。我有一个想法:一(1)在oncreate()中一开始就new socket();然后按键调用sendmessage(指令)方法,里面只用socket.flush();这样子就不用线程了。
求帮主指教,我等等会实践下试试我的想法。
|