android studio连接io.socket:sokect.io-client服务器的条件

android studio连接io.socket:sokect.io-client服务器的条件,第1张

条件是socket协议。

WebSocket是跟随HTML5一同提出的,所以在兼容性上存在问题,这时一个非常好用的库就登场了——Socketio。

socketio封装了websocket,同时包含了其它的连接方式,你在任何浏览器里都可以使用socketio来建立异步的连接。socketio包含了服务端和客户端的库,如果在浏览器中使用了socketio的js,服务端也必须同样适用。

socketio是基于Websocket的Client-Server实时通信库。

socketio底层是基于engineio这个库。engineio为socketio提供跨浏览器/跨设备的双向通信的底层库。engineio使用了Websocket和XHR方式封装了一套socket协议。在低版本的浏览器中,不支持Websocket,为了兼容使用长轮询(polling)替代。

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();

acceptThreadstart();

}

}

class AcceptThread extends Thread

{

@Override

public void run()

{

while (isStarted)

{

try

{

// 阻塞接收

Socket client = serverSocketaccept();

initClientSocket( client );

}

catch (Exception e)

{

// TODO: handle exception

}

}

superrun();

}

}

private void initClientSocket(Socket client)

{

boolean isRunnable = true;

/

重置

/

if (cInputStream != null)

{

try

{

cInputStreamclose();

cInputStream = null;

}

catch (IOException e)

{

eprintStackTrace();

}

}

if (clientSocket != null)

{

try

{

clientSocketclose();

clientSocket = null;

}

catch (Exception e)

{

// TODO: handle exception

}

}

String resultStr = "";

clientSocket = client;

try

{

cInputStream = new DataInputStream( clientSocketgetInputStream() );

if (isRunnable)

{

StringBuffer sb1 = new StringBuffer();

int ss;

while ((ss = cInputStreamread()) != -1)

{

sb1append( (char) ss );

}

resultStr = sb1toString();

//发送广播

Intent intent = new Intent();

intentputExtra( "str", resultStr );

intentsetAction( "comjonereceiver" );

sendBroadcast( intent );

// Message msg = ((MainActivity)getApplicationContext())handlerobtainMessage();

// msgobj = resultStr;

// ((MainActivity)getApplicationContext())handlersendMessage( msg );

}

}

catch (Exception e)

{

// TODO Auto-generated catch block

isRunnable = false;

eprintStackTrace();

}

}

public InputStream getInputStreamFromUrl(String urlStr) throws MalformedURLException,IOException {

url = new URL(urlStr);

HttpURLConnection urlConn = (HttpURLConnection)urlopenConnection();

InputStream inputStream = urlConngetInputStream();

return inputStream;

}

注意用到了 URL类封装 url,HttpURLConnection建立http链接,通过它的成员方法getInputStream获得输入流,你然后读这个输入流,即可读取服务器端的由URL指定的文件。

android应该是通过以私网的形式连接到你的宿主机的虚拟NAT上,所以你用宿主机上的web服务器做测试时,不要使用localhost和127001 因为这个是android的虚拟机的本地。而是要用你的宿主机的IP地址。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » android studio连接io.socket:sokect.io-client服务器的条件

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情