android如何访问远程服务器
1、现在电脑上安装Teamviewer,运行该软件,会生成ID和密码,
如果要每次开机都能远程访问,可以设置无人值守访问,如下图:
2、安卓手机端也安装Teamviewer
3、打开手机端,输入ID和密码就可以直连了,如下图:
条件是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 boolean isConnByHttp(){ boolean isConn = false;
URL url;
HttpURLConnection conn = null; try {
url = new URL("ttp://wldaishu001com/YHDriverasmx");
conn = (HttpURLConnection)urlopenConnection();
connsetConnectTimeout(10005); if(conngetResponseCode()==200){
isConn = true;
}
} catch (MalformedURLException e) { // TODO Auto-generated catch block eprintStackTrace();
}catch (IOException e) { // TODO Auto-generated catch block eprintStackTrace();
}finally{
conndisconnect();
} return isConn;
}
在服务端写一个socket,用死循环的方式监听本机的某个端口,如30000,用来接收登录的输入流,在android端点击登录时创建一个对应该端口的socket,把登录信息写到输出流里即可。服务器端就能判断出是否允许登录
0条评论