您的位置:首页 > 移动开发 > Android开发

android socket长连接

2016-04-19 15:24 197 查看
实现原理:

1:android客户端通过service在后台通过servreScoket不断的accept,一旦有相应的socket到达,则启动一个线程去处理

2::在线程中处理完返回给我们android客户端的消息或任务之后,要将这种结果表现在ui上,这个步骤方法就比较多了,例如你可以发一个广播来通知ui,或者你可以通过一个static的handler来处理

*************************************service中的关键代码

private void startSocketServer()

{

if (!isStarted)

{

try

{

serverSocket = new ServerSocket( 6661 );

isStarted = true;

}

catch (Exception e)

{

// TODO: handle exception

}

// 启动线程处理

AcceptThread acceptThread = new AcceptThread();

acceptThread.start();

}

}

class AcceptThread extends Thread

{

@Override

public void run()

{

while (isStarted)

{

try

{

// 阻塞接收

Socket client = serverSocket.accept();

initClientSocket( client );

}

catch (Exception e)

{

// TODO: handle exception

}

}

super.run();

}

}

private void initClientSocket(Socket client)

{

boolean isRunnable = true;

/**

* 重置

**/

if (cInputStream != null)

{

try

{

cInputStream.close();

cInputStream = null;

}

catch (IOException e)

{

e.printStackTrace();

}

}

if (clientSocket != null)

{

try

{

clientSocket.close();

clientSocket = null;

}

catch (Exception e)

{

// TODO: handle exception

}

}

String resultStr = "";

clientSocket = client;

try

{

cInputStream = new DataInputStream( clientSocket.getInputStream() );

if (isRunnable)

{

StringBuffer sb1 = new StringBuffer();

int ss;

while ((ss = cInputStream.read()) != -1)

{

sb1.append( (char) ss );

}

resultStr = sb1.toString();

//发送广播

Intent intent = new Intent();

intent.putExtra( "str", resultStr );

intent.setAction( "com.jone.receiver" );

sendBroadcast( intent );

// Message msg = ((MainActivity)getApplicationContext()).handler.obtainMessage();

// msg.obj = resultStr;

// ((MainActivity)getApplicationContext()).handler.sendMessage( msg );

}

}

catch (Exception e)

{

// TODO Auto-generated catch block

isRunnable = false;

e.printStackTrace();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: