精华内容
下载资源
问答
  • 在很多产业中,移动服务器配合android系统来实现小型服务器构架越来越成为我们的议题,尤其是物联网的发展,IPV6的推出。智能家居对移动服务器的需要更是千丝万缕,毕竟一台成熟的服务器价格还是不菲的,不适合广泛...
    在很多产业中,移动服务器配合android系统来实现小型服务器构架越来越成为我们的议题,尤其是物联网的发展,IPV6的推出。智能家居对移动服务器的需要更是千丝万缕,毕竟一台成熟的服务器价格还是不菲的,不适合广泛的每个家庭来安装。所以我提出了移动服务器的议题,来解决我们小访问量的服务器构架。
    

          小型服务器的构架原理是什么,框架结构又如何,通信机制是什么,实现办法该怎样,都是我们遇上的问题。这里我会一一记录我构架的服务器的过程,供大家参考。

    服务器的框架:采用apache技术,通信采用http的GET方法,POST方法我没有搞通。

    1.效果演示

    效果为:

     

                                                       未打开wifi获取的效果


                                                      打开wifi获取的IP地址


                                           浏览器通过get方式请求服务器获取的内容。


    2.程序讲解

    2.1 主线程开启service服务

    @Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		initViews();
    		intent = new Intent(this, WebService.class);
    		Log.i(TAG, "------->>>"+"初始化完毕"+intent.toString());
    	}
    
    	private void initViews() {
    		toggleBtn = (ToggleButton) findViewById(R.id.togbtnOpen);
    		toggleBtn.setOnCheckedChangeListener(this);
    		urlText = (TextView) findViewById(R.id.txtUrl);
    	}

    处理toggleButton改变触发

    @Override
    	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    		if (isChecked) {
    			String ip = getLocalIpAddress();
    			if (ip == null) {
    				urlText.setText("");
    			} else {
    				startService(intent);
    				Log.i(TAG, "------->>>"+"WebService起动");
    				urlText.setText("http://" + ip + ":" + WebService.PORT + "/");
    			}
    		} else {
    			stopService(intent);
    			Log.i(TAG, "------->>>"+"WebService关闭"+intent.toString());
    			urlText.setText("");
    		}
    	}

    获取当前IP地址

    public String getLocalIpAddress(){
    		
    		WifiManager wifimanager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);
    		WifiInfo wifiinfo = (WifiInfo)wifimanager.getConnectionInfo();
    		try {  
    			int i = wifiinfo.getIpAddress();
    			//返回IP 地址
    			return (i&0xff)+"."+((i>>8)&0xff)+"."+((i>>16)&0xff)+"."+((i>>24)&0xff);
    	    } catch (Exception ex) {  
    	        ex.printStackTrace();
    	    }  
    	    return null;  
    	}

    2.在service任务中加入server处理

    public class WebService extends Service {
    	
    	public static final int PORT = 7766;
    	public static final String TAG = "WebService";
    	private WebServer webServer;
    
    	@Override
    	public IBinder onBind(Intent intent) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public void onCreate() {
    		super.onCreate();
    		webServer = new WebServer(PORT);
    	}
    
    	@Override
    	public int onStartCommand(Intent intent, int flags, int startId) {
    		webServer.setDaemon(true);
    		webServer.start();
    		return super.onStartCommand(intent, flags, startId);
    	}
    
    	@Override
    	public void onDestroy() {
    		webServer.close();
    		super.onDestroy();
    	}
    
    }

    3.做WebServer处理程序

    
    public class WebServer extends Thread {
    	public static final String TAG = "WebService";
    
    	private int port;
    	private boolean isLoop = false;
    
    	public WebServer(int port) {
    		super();
    		this.port = port;
    	}
    
    	@Override
    	public void run() {
    		ServerSocket serverSocket = null;
    		try {
    			Log.i(TAG, "coming in!!");
    			// 创建服务器套接字
    			serverSocket = new ServerSocket(port);
    			// 创建HTTP协议处理器
    			BasicHttpProcessor httpproc = new BasicHttpProcessor();
    			// 增加HTTP协议拦截器
    			httpproc.addInterceptor(new ResponseDate());	
    			httpproc.addInterceptor(new ResponseServer());	
    			httpproc.addInterceptor(new ResponseContent());
    			httpproc.addInterceptor(new ResponseConnControl());
    			// 创建HTTP服务
    			HttpService httpService = new HttpService(httpproc,
    					new DefaultConnectionReuseStrategy(),
    					new DefaultHttpResponseFactory());
    			// 创建HTTP参数
    			HttpParams params = new BasicHttpParams();
    			params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 5000)
    					.setIntParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE,8 * 1024)
    					.setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false)
    					.setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true)
    					.setParameter(CoreProtocolPNames.ORIGIN_SERVER,"WebServer/1.1");
    			// 设置HTTP参数
    			httpService.setParams(params);
    			// 创建HTTP请求执行器注册表
    			HttpRequestHandlerRegistry reqistry = new HttpRequestHandlerRegistry();
    			
    			reqistry.register("*"+"AfangCtrl", new AfangCtrl());
    			reqistry.register("*"+"CameraCtrl", new CameraCtrl());
    			reqistry.register("*"+"LightCtrl", new LightCtrl());
    			reqistry.register("*"+"TvCtrl", new TvCtrl());
    			// 设置HTTP请求执行器
    			httpService.setHandlerResolver(reqistry);
    			/* 循环接收各客户端 */
    			isLoop = true;
    			while (isLoop && !Thread.interrupted()) {
    				// 接收客户端套接字
    				Socket socket = serverSocket.accept();
    				// 绑定至服务器端HTTP连接
    				DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
    				conn.bind(socket, params);
    				// 派送至WorkerThread处理请求
    				Thread t = new WorkerThread(httpService, conn);
    				t.setDaemon(true); // 设为守护线程
    				t.start();
    			}
    		} catch (IOException e) {
    			isLoop = false;
    			e.printStackTrace();
    		} finally {
    			try {
    				if (serverSocket != null) {
    					serverSocket.close();
    				}
    			} catch (IOException e) {
    			}
    		}
    	}
    
    	public void close() {
    		isLoop = false;
    	}
    
    }
    

    4.对LightCtrl进行简单描述

     当前类要继承HttpRequestHandler类,做handler实现请求的处理

    public class LightCtrl implements HttpRequestHandler {
    	private static final String TAG = "HttpJsonlogin";
    
    	public LightCtrl(){
    
    	}
    	@Override
    	public void handle(HttpRequest request, HttpResponse response,
    			HttpContext context) throws HttpException, IOException {
    	
    		RequestLine requestLine = request.getRequestLine();
    		String method=requestLine.getMethod();
    		if("GET".equals(method)){
    			doGet(request, response);
    		}else{
    			Log.i(TAG, "method is error:"+method.toString());  
    		}
    	}
    	/****************************************************************
    	 * urlCmd格式:http://loaclhost:port/DEVICE?device=num&operation=open(close)&clientId=phone
    	 * @param request
    	 * @param response
    	 */
    	public void doGet(HttpRequest request, HttpResponse response){
    		response.setStatusCode(HttpStatus.SC_OK);//响应成功
    		response.setHeader("Content-Type", "text/json");
    		response.setHeader("Content-Type", "charset=gbk");
    		JSONObject json = new JSONObject();
    		//************解析参数*************************************
    		String urlCmd = request.getRequestLine().getUri();	
    		int a = urlCmd.indexOf("device");
    		a=a+7;
    		int b = urlCmd.indexOf("&",a);
    		String device = urlCmd.substring(a, b);
    		
    		a = urlCmd.indexOf("operation");
    		a=a+10;
    		b = urlCmd.indexOf("&",a);
    		String operation = urlCmd.substring(a, b);
    		
    		a = urlCmd.indexOf("clientId");
    		a=a+9;
    		b = urlCmd.length();
    		String clientId = urlCmd.substring(a, b);
    		Log.i(TAG, "请求命令为:"+device+operation+clientId);
    		//根据命令做出响应
    		
    		StringEntity entity = null;
    		try {
    			json.put("device", device);
    			json.put("operation", operation);
    			json.put("clientId", clientId);
    			json.put("result", "ok");
    			Log.i(TAG,"响应JSON数据为:"+json.toString());
    			entity = new StringEntity(json.toString(),"UTF-8");
    		} catch (JSONException e) {
    			e.printStackTrace();
    		} catch (UnsupportedEncodingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}	
    		response.setEntity(entity);
    	}
    }

    展开全文
  • 移动App与服务器安全通信

    千次阅读 2015-11-17 14:04:57
    最近,项目给移动端提供API接口,移动app通过post请求调用服务器的api接口,为了确保服务器的数据安全和通讯安全,防止数据篡改等恶意攻击,本人通过查询资料和思考,总结出了一个方案,个人认为能解决基本的接口...

            最近,项目给移动端提供API接口,移动app通过post请求调用服务器的api接口,为了确保服务器的数据安全和通讯安全,防止数据篡改等恶意攻击,本人通过查询资料和思考,总结出了一个方案,个人认为能解决基本的接口调用安全问题,具体方案如下。

            首先,移动端通过访问公开接口与服务器通讯,使用用户名和密码(当然是MD5加密)作为参数向服务器申请TOKEN,服务器获取用户名和密码,服务器端判断该用户是否合法,如果合法,服务端为移动APP应用分配APPID (32位随机字串)以及TOKEN(32位随机字串)同时服务器保存APPID和TOKEN,当然根据应用的不同,服务器可以为该TOKEN(建立有效期如3600s)后台就要建立触发器或者自动作业销毁token。移动端收到APPID和TOKEN进行存储,同时返回给用户与服务器建立连接成功等提示信息。

            之后,移动端请求其他功能接口,接口参数中要增加APPID和TOKEN,其接口格式如下:method(APPID, Token,...其他参数),服务器首先验证token是否有效,进行数据服务,完成之后如果token为临时有效,应重新修改有效期时间起点为调用时刻。

           最后,APP一直没有访问服务端,如token永久有效,则没有后续操作,若token为临时有效,token过了有效期,验证无法通过则通知用户访问相应接口,重新获取验证token。

           该方案其实是两步验证,其实对于一般应用,在用户注册的时候,可以同时为用户生成永久验证Token,用户在使用APP进行调用服务端API的时候,将该Token配置到系统中,这样就可以防止恶意用户直接通过访问post请求对服务端的数据造成安全隐患。

         

     

    展开全文
  • Linux服务器挂载ntfs移动硬盘

    万次阅读 热门讨论 2018-07-13 13:15:01
    服务器上的一些移动硬盘需要备份到数据,公司买了个500G的机房,带上去移动硬盘,将服务器插到硬盘上,然后开始操作 Fdisk -l 查看硬盘是否被检测到了 已经检测到了,并且有一个分区了,因为windows打开之后...

    服务器上的一些移动硬盘需要备份到数据,公司买了个500G的机房,带上去移动硬盘,将服务器插到硬盘上,然后开始操作

    Fdisk -l 查看硬盘是否被检测到了

     

     

    已经检测到了,并且有一个分区了,因为windows打开之后就会看到一个465G的分区,分区的格式是ntfs(windows好像很多都是ntfs的),既然有分区了就不需要我们在创建了,如果需要创建的话这个分区得删除,因为这个分区占了全部的空间,再创建一个主分区的话不会成功,会卡在那一步,因为没有空间给新的主分区了,分区和删除分区可以看帮助,fdisk /dev/要操作的硬盘设备符,例如: /dev/sda ,/dev/sdb ,/dev/sdc  补充一点小知识,/dev/sdc /dev/sdd  这些都是叫硬盘设备符,按照26个英文字母排序的,第一块是sda,第二块是sdb.....以此类推,不知道会不会有第27块,如果有那设备符应该是什么.....不考虑这些了,了解一下就可以了。

     

    Linux好像默认是不支持ntfs系统的,别人的不清楚,我的是,我用的centos7,然后需要我们安装一个插件,ntfs-3g_ntfsprogs。

     

    直接wget服务器下载

    wget http://tuxera.com/opensource/ntfs-3g_ntfsprogs-2013.1.13.tgz

     

    然后解压,tgz的解压方式和tar.gz的解压方式是一样的。

    tar -xvf ntfs-3g_ntfsprogs-2013.1.13.tgz

    检测环境

    cd ntfs-3g_ntfsprogs-2013.1.13

     ./configure

     

     

    然后make && make install安装即可

     

     

     

     

    安装完之后,然后输入mkn,按两次tab键,你就会发现mknfs这个命令了,表示已支持mknod   mkntfs  这时服务器支持NTFS文件系统了

     

    然后就可以挂载了,新建个目录,放挂载硬盘

    mkdir -p /mnt/data

    mount -t ntfs-3g  /dev/sdb1 /mnt/data

     

    注意,格式要打ntfs-3g,还有一点,一个比较低级的错误,挂载的时候别挂成硬盘设备符了,mount –t ntfs-3g  /dev/sdb /mnt/data  这样的话会提示你,格式不对什么的错误,因为那个是设备符,不是分区,要挂载的是分区。在下不才,就犯了这个错误,找了半小时才找到根源,差点打自己一嘴巴。

    然后df -h查看一下是不是已经挂载上了。

    然后开始备份吧。

     

    如果是要挂载服务器上不拆卸,可以加上开机自动挂载,以下是加入到开机自启的命令。

     echo "/dev/sdb1 /mnt/data ntfs-3g defaults 0 0" >> /etc/fstab

     

     

    展开全文
  • 移动代理服务器MAS

    千次阅读 2011-06-26 16:58:00
    我OA里用的是移动的接口,它的原理好像也是加到队列里,间隔时间检查发送的有两个DLL:ImApiDotNet.dll 和 libmySQL.dllC# code <!--Code highlighting produced by Actipro CodeHighlighter (freeware)...

    我OA里用的是移动的接口,它的原理好像也是加到队列里,间隔时间检查发送的
    有两个DLL:ImApiDotNet.dll 和 libmySQL.dll

    C# code
    private static int sendMobileMessage(string[] mobiles,string msgText) { int sysState=0; ImApiDotNet.APIClient smsObj=new ImApiDotNet.APIClient(); int initState=smsObj.init("IP地址", "用户名", "密码", "API的code", "数据库名"); if(initState==0) { if(smsObj.sendSM(mobiles,msgText,null,0,0)==0) { sysState=1;//发送成功 } else { sysState=0;//发送失败 } } else { sysState=-1;//初使化失败 //Microsoft.Practices.EnterpriseLibrary.Logging.Logger.Write("手机短信发送失败:原因:["+initLot[initState]+"],"); } return sysState; }
    展开全文
  • 移动代理服务器规范

    千次阅读 2009-05-04 11:51:00
    业务指中国移动通过在集团客户(主要为拥有完备信息系统的集团客户)内部部署移动代理服务器,为集团客户提供的基于移动终端(包括短信、彩信、 WAP 、手机客户端等)的信息化应用服务。集团客户通过移动代理服务器...
  • 移动代理服务器 Mobile Agent Server(MAS)

    千次阅读 2012-10-16 16:51:16
    移动代理服务器 Mobile Agent Server(MAS) 1、MAS系统组成和功能:  MAS系统包括MAS终端、MAS服务器和MAS管理平台,中国移动通过在集团客户(主要为拥有完备企业信息系统的政府行业用户和企业)内部部署移动代理...
  • 服务器识别不了移动硬盘

    千次阅读 2018-11-08 16:17:45
    Windows只识别NTFS格式...U盘与移动硬盘格式化FAT32的话,一般两边都能识别出来 如果移动硬盘在window上识别出来在linux上识别不出来,一般就是NTFS格式识别不出来,需要 sudo apt-get install cifs-utils  ...
  • Linux服务器如何识别移动硬盘?

    千次阅读 2020-02-16 16:29:13
    通常我们使用的移动硬盘或U盘一般都是ntfs或fat32的文件系统,常跟服务器打交道的小伙伴,会经常遇到把移动硬盘或U盘上的数据拷贝到Linux服务器上。绝大多数Linux发行版内核支持fat32文件系统,因此我们直接mount...
  • Python作为移动客户端后台服务器

    千次阅读 2016-02-26 17:32:58
    python+flask实现服务器: 安装python和flask略过,servicestest.py代码: from flask import Flask, jsonify app = Flask(__name__) tasks = [ { 'id':1, 'title':u'Buy groceries', 'description':u'Milk...
  • 移动边缘计算环境下的边缘服务器放置方法研究[D].北京邮电大学,2018. 阅读材料可以去知网搜一下,如果没有办法下载给我留言,我发给你百度云盘链接 这段时间我一直在阅读边缘计算方面的论文,心里一直有这个疑惑...
  • 游戏服务器之角色移动

    千次阅读 2014-02-08 21:29:57
    角色移动主要是要处理前后端的移动同步和阻挡检测。 (1)前端发送移动请求 (2)检查该角色是否可以移动到该位置,并记录移动请求 (3) 角色移动的调用层次: 逻辑主循环-->场景管理器遍历->场景循环-->角色...
  • 手机移动端与服务器端安全通信一直是个问题,让人比较头疼,最近在网上查了一些资料,总结了一下得出了一个自我感觉还好的方案,分享一下,也希望得到大家的批评斧正。  CS,C客户端,S服务器端  在客户端软件...
  • centos不同服务器移动文件

    千次阅读 2017-04-20 17:28:26
    scp /有移动文件的文件夹路径/所移动的文件(如果是所有文件用*代替) root@XXX.XXX.XXX.XXX:/移动的目标路径/
  • 发布轻开平台移动App服务器

    千次阅读 热门讨论 2015-05-27 04:04:46
    复制webeasy目录到D:\下,然后进入...别忘了,移动App服务器同时也是您的官方网站,在这儿开发网站就一个词: Easy 下载来源: 移动App应用服务器开发从入门到精通 快速搭建移动App服务器
  • 设置移动热点,目的是为了手机访问本地服务器. 最初的时候,电脑是可以创建移动热点,但是手机就是连接不上,各种百度,各种试.然后我发现把电脑激活了.最后可以了. 手机连接之后,访问的不是本地服务器.原因是本地ip...
  • 我们的服务器在电信托管,现在开发了一款app应用,如果不使用wifi用移动网络不能访问服务器的数据了 但是在联通网络下却可以,在移动网络下面拿手机去访问官网也可以,唯独在app里面不能访问,以前我们的项目部署在...
  • 移动客户端与服务器通信方式一

    千次阅读 2017-05-04 18:00:18
    一般移动端访问是通过get,post与服务器通信,但是这种半双工通信有个明显的缺点,那就是服务器不能主动发消息给客户端,必须是客户端请求,服务器回答模式,这样有时候就会满足不了我们的需求 *我总结了一下 有...
  • 安装好后,将移动磁盘插入到服务器的usb口中 新建一个目录,将磁盘挂载在新建的目录上 挂载命令如下: mount -t ntfs-3g /dev/移动磁盘盘符 /新建目录名称 移动磁盘查看盘符的命令是 fdisk -l
  • 搭建移动流媒体服务器(一)

    千次阅读 2010-01-07 14:07:00
    是不是有时候不想将影视文件频繁传到卡上,但又想看看视频节目...下面心如海就带大家一起动手,自己搭建一个移动流媒体服务器吧! 一、搭建流媒体服务器 首先我们安装 realserver 8.01 ,这个软件有很多受权版本,我们
  • 开发一个iOS app 想把用户注册后的头像、昵称、密码等信息保存到服务器上,请问怎么做啊?哪里弄服务器啊?我没接触过服务器,但你们直说无妨,我可以一一去学
  • 树莓派制作移动物体检测服务器

    万次阅读 热门讨论 2013-03-12 16:48:02
    made by Rk 本文由浙江大学《嵌入式系统》课程提供强力支持。 感谢翁恺老师 @翁恺BA5AG ...目标:连接一个USB摄像头,做一个http motion jpeg服务器 1、安装相关软件:Motion apt-get instal
  • 只是在移动网络下访问不到服务器数据,在联通和WIFI下都可以!服务器里也有几个项目,都是没问题的。这是我的androidManifest配置及错误![图片](https://img-ask.csdn.net/upload/201606/24/1466738149_938750.png)!...
  • 这几天在G1上看3g.youku.com,对它的视频流播放很好奇,在电脑上看了3g.youku.com的视频,发现是用rtsp协议播放的,于是自己打算用 apple 的Darwin 加个流媒体服务器,...服务器本来是一台流媒体服务器,上面已经部署了f
  • 想把自己的电脑弄成一个服务器,自己的手机可以通过移动网络访问它(不是在局域网中的访问),实现电脑和手机之间的通信,例如,当手机丢失时,电脑可以向手机发送一些指令(比如清除数据等),而手机也可以通过安装...
  • 原因:Server 2003系统是服务器用的,对安全性的设置较高,所以不会自动显示外接硬盘的盘符。 解决方法有两种,一次性的和永久性的。 一次性解决方法:每次重启服务器后都得用鼠标进行一系列的点击。 永久性解决...
  • 入门级移动App服务器的软硬件需求

    千次阅读 热门讨论 2015-05-26 00:48:32
    名称 分类 版本 ...Tomcat Web服务器 5.x及以上 Easy do it (轻松互联网开发平台,简称轻开平台,原名WebEasy) 应用开发服务器 2014及以上 Access 数据库 97及以上 EditPlus 开发工具 2.x及以上
  • 移动IP研究之分享几个代理服务器

    万次阅读 2011-11-19 19:04:56
    上面的代理均是匿名代理服务器, 但是通过这些代理仍然不能访问一些网站(如WAP飞信,139邮箱等), 说明这些IP不在移动的安全列表中(或者缺少某些HTTP Header). 手机通过CMWAP上网, 移动网关会给白名单网站(比较...
  • java 服务器移动银联支付的流程

    千次阅读 2014-05-26 17:02:01
    一,银联支付的整体流程 ...----客户端由于集成了银联控件,根据流水账号调用银联支付界面进行支付----支付完成之后银联会回调服务器端提供的回调地址----服务器端根据回调参数处理业务逻辑 二,服务器端主要代码解析.
  • 最近做网站的移动设备自适应,按照正常情况下,只要电脑和移动设备连接到同一个无线内,移动设备是可以访问本地服务器的。笔者这么做的时候也是可以访问服务器的。 可是由于笔者所在的网络无法获取公网地址,只能...
  • VSS数据从一台服务器移动到另一台

    千次阅读 2010-08-11 09:48:00
    对于这种移动,微软的文档上已经有了说明,下面我就简单的描述一下,毕竟有很多像我一样的人不看文档的,呵呵。 简短一句话,这种情况,只需要把vss共享文件复制过来就可以了! 之后就可以连接了,设置好路径,在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 541,469
精华内容 216,587
关键字:

移动服务器