1. android客户端和服务端的交互怎么做
跟服务器传数据的话,一般都是采用 RESTful API 来传输。这样首先要对 HTTP 协议有初步的理解,至少知道 GET / POST 分别是干嘛的有什么区别。然后就是实现问题。可以学习一些网络框架的使用,如 volley 等等。
服务器跟硬件通信的话属于嵌入式领域,不知道题主是否学过单片机相关。反正这部分应该不属于 Android 领域。
一般两种方式TCP和HTTP。TCP的学习Socket,HTTP的话熟悉一下HTTP协议和相关Java API。
2. android与WEB服务器交互时,如何保证在同一个会话Session中通信
最近在开发项目的过程中,遇到android与web服务器要在同一session下通信的问题。在解决问题前先回顾下Session与Cookie:Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。Session可以用Cookie来实现,也可以用URL回写的机制来实现。Cookie和Session有以下明显的不同点:1)Cookie将状态保存在客户端,Session将状态保存在服务器端;2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是不同用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;4)就安全性来说:当你访问一个使用session 的站点,同时在自己机器上建立一个cookie,建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。Session机制Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。Session的实现方式1) 使用Cookie来实现服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。2 )使用URL回显来实现URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带给服务器。 如果直接在浏览器中输入url来请求资源,Session是匹配不到的。Tomcat对 Session的实现,是一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回写。如果发现Cookie被禁用,就一直使用URL回写。jsp开发处理到Session的时候,对页面中的链接记得使用 response.encodeURL() 。回顾完Session和Cookie,我们来说说为什么手机端与服务器交互没有实现在同一session下?1)原因很简单,就是因为android手机端在访问web服务器时,没有给http请求头部设置sessionID,而使用web浏览器作为客户端访问服务器时,在客户端每次发起请求的时候,都会将交互中的sessionID:JSESSIONID设置在Cookie头中携带过去,服务器根据这个sessionID获取对应的Session,而不是重新创建一个新Session(除了这个Session失效)。以java.net.HttpURLConnection发起请求为例:获取Cookie: URL url = new URL(requrl); HttpURLConnection con= (HttpURLConnection) url.openConnection(); // 取得sessionid. String cookieval = con.getHeaderField("set-cookie"); String sessionid; if(cookieval != null) { sessionid = cookieval.substring(0, cookieval.indexOf(";")); } //sessionid值格式:JSESSIONID=,是键值对,不是单指值发送设置cookie: URL url = new URL(requrl); HttpURLConnectioncon= (HttpURLConnection) url.openConnection();
3. 安卓手机客户端可以通过哪些方式与PC服务器端通信
有如下的方法供选择:
1. 利用USB口和USB连接线:
电脑可以将手机客户端作为一个终端访问,此时需要一款第三方软件,比如金山手机、豌豆荚、360等等。
也可以将手机作为一个外部存储器直接访问手机的存储位置来传递文件。
2.利用手机和电脑的蓝牙,采用蓝牙进行通讯。蓝牙通讯的距离一般小于10米。蓝牙建立连接之后,一般蓝牙的协议之中带有终端访问功能,可以直接传输文件。
3.利用wifi,两者都连接本地或公共wifi【手机通常有wifi,如果电脑没有无线,用有线连接网络也可以】:
通过共享文件夹的方式,互相访问传输文件。
也可以安装第三方FTP服务端和客户端软件,实现FTP文件传输。
或者利用邮箱,自己发给自己,自己在另一个设备上接收下载完成文件传输。
4.还有一种方法,就是两者都安装微信,同时开通他们,在微信中传输文件,另一台机器上将文件下载下来就可以了。
可能还有其他方法,取决于你对这些机器的理解程度。因为他们实际上都是网络上的一个节点。
4. android客户端怎么与服务器交互
1、java服务器建立至少一种服务webservices、servlet、socket
2、客户端通过socket或者httpurlconnection的方式进行连接访问
服务端:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
//用HTML格式给浏览器返回数据
out.println("<html>");
out.println("<head>");
out.println("<title>Tomcat Servlet测试</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello,First Servlet!");
out.println("</body>");
out.println("</html>");
out.println("Hello,第一个Tomcat!!!");
out.close();
}
客户端:
private String doGet(String url){
String responseStr = "";
try {
String name = nameEdit.getText().toString().trim();
String code = codeEdit.getText().toString().trim();
String getUrl = URL + "?NAME=" + name+"&"+"CODE=" + code;
HttpGet httpRequest = new HttpGet(getUrl);
HttpParams params = new BasicHttpParams();
ConnManagerParams.setTimeout(params, 1000);
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 5000);
httpRequest.setParams(params);
HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
final int ret = httpResponse.getStatusLine().getStatusCode();
if(ret == HttpStatus.SC_OK){
responseStr = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8);
}else{
responseStr = "-1";
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return responseStr;
}
5. android 能和网站服务端交互么
android客户端和服务器端是基于IntentService的,具体如下:
后台使用简单的servlet,支持GET或POST。这个servlet最终返回给前台一个字符串flag,值是true或false,表示登录是否成功。
然后在安卓的ADT上创建一个安卓项目,建立两个Activity,分别作为登录界面和登录成功界面。
HTTP的访问公共类,用于处理GET和POST请求。
IntentService服务,用于在后台以队列方式处理耗时操作。
在AndroidManifest.xml中注册IntentService。注意uses-permission节点,为程序开启访问网络的权限。
登陆界面处理,注意按钮监听事件中,使用Intent将要传递的值传给service。接收广播类中,同样使用Intent将要传递的值传给下一个Activity。在onCreate()中,动态注册接收广播类的实例receiver。在接收广播类中,不要使用完毕后忘记注销接收器,否则会报一个Are you missing a call to unregisterReceiver()? 的异常。
6. 手机中的应用是如何与互联网上的服务器通信的
手机中的应用是通过手机上网,即网络与互联网上的服务器通信,和即手机如果能上互联网就可以与互联网上的服务器通信,所以只需要让手机上互联网就行了,而手机上互联网现在很普通,所有的运营商都支持这种业务,手机把信号送到信号塔后,信号塔就再把信号往移动、联通的机房送,然后就连到互联网了,反过来一样,
7. android与服务器交互的应用怎么设计
笔者以前是学的Java EE,由于项目需要要开发Android,所以临时补了一个多星期,主要是手机端和服务器端交互,双向开发的。 转载
首先在服务器端,我采用的是SSH框架,struts 2集合了JSON插件,服务器和客户端的信息交互采用的JSON来传输,由于在服务器端用了Struts 2,所以我就用装了一个JSON插件。这样,很轻易的就把服务器端的信息用JSON的形式发送到了手机端。以下是代码:
首先,在服务器端搭建好SSH框架,具体细节就不在陈述。struts.xml配置如下:
<packagename="login"extends="json-default">
<actionname="login"class="com.jclick.test.LoginAction"method="login">
<resulttype="json"><paramname="includeProperties">result</param></result>
</action>
</package>
<packagename="login"extends="json-default">
<actionname="login"class="com.jclick.test.LoginAction"method="login">
<resulttype="json"><paramname="includeProperties">result</param></result>
</action>
</package>
手机端的代码如下:
首先,手机端有一个缓存类,主要用于缓存一些手机端需要访问的数据,这样的好处是可以达达节省手机和服务器的交互,用单例实现的:
packagecom.jclick.cache;
importcom.jclick.bean.User;
publicclassCache{
privateUserUser;
privateCache(){
}
/**构造单例*/
privatestaticclassCacheHolder{
=newCache();
}
publicCachegetInstance(){
returnCacheHolder.INSTANCE;
}
publicUsergetUser(){
returnUser;
}
publicvoidsetUser(UserUser){
this.User=User;
}
}
packagecom.jclick.cache;
importcom.jclick.bean.User;
publicclassCache{
privateUserUser;
privateCache(){
}
/**构造单例*/
privatestaticclassCacheHolder{
=newCache();
}
publicCachegetInstance(){
returnCacheHolder.INSTANCE;
}
publicUsergetUser(){
returnUser;
}
publicvoidsetUser(UserUser){
this.User=User;
}
}
接着开始书写手机端的协议,用户向服务器发送请求,同时服务器反馈给手机端信息的:
packagecom.jclick.protocol;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.util.ArrayList;
importjava.util.List;
importorg.apache.http.HttpResponse;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.message.BasicNameValuePair;
importorg.json.JSONException;
importorg.json.JSONObject;
publicclassBaseProtocol{
privateStringBuildersb=newStringBuilder();
privateHttpClienthttpClient;
privateHttpPosthttpRequest;
privateHttpResponseresponse;
privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>();
BaseProtocol(){
httpClient=newDefaultHttpClient();
}
/**
*向服务器端发送请求
*
*@paramurl
*@throwsException
*/
protectedvoidpack(Stringurl)throwsException{
httpClient=newDefaultHttpClient();
httpRequest=newHttpPost(url);
httpRequest.setEntity(newUrlEncodedFormEntity(nameValuePair));
response=httpClient.execute(httpRequest);
}
/**
*得到返回数据
*
*@paramurl
*@return
*@throwsException
*/
protectedvoidparse()throwsException{
//TODO状态处理500200
if(response.getStatusLine().getStatusCode()==200){
BufferedReaderbufferedReader2=newBufferedReader(
newInputStreamReader(response.getEntity().getContent()));
for(Strings=bufferedReader2.readLine();s!=null;s=bufferedReader2
.readLine()){
sb.append(s);
}
}
}
/**
*向服务器发送信息
*
*@paramkey
*@paramvalue
*/
publicvoidaddNameValuePair(Stringkey,Stringvalue){
nameValuePair.add(newBasicNameValuePair(key,value));
}
/**
*返回JSONObject对象数据模型
*
*@return
*@throwsJSONException
*/
publicJSONObjectgetJSON()throwsJSONException{
returnnewJSONObject(sb.toString());
}
}
packagecom.jclick.protocol;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.util.ArrayList;
importjava.util.List;
importorg.apache.http.HttpResponse;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.message.BasicNameValuePair;
importorg.json.JSONException;
importorg.json.JSONObject;
publicclassBaseProtocol{
privateStringBuildersb=newStringBuilder();
privateHttpClienthttpClient;
privateHttpPosthttpRequest;
privateHttpResponseresponse;
privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>();
BaseProtocol(){
httpClient=newDefaultHttpClient();
}
/**
*向服务器端发送请求
*
*@paramurl
*@throwsException
*/
protectedvoidpack(Stringurl)throwsException{
httpClient=newDefaultHttpClient();
httpRequest=newHttpPost(url);
httpRequest.setEntity(newUrlEncodedFormEntity(nameValuePair));
response=httpClient.execute(httpRequest);
}
/**
*得到返回数据
*
*@paramurl
*@return
*@throwsException
*/
protectedvoidparse()throwsException{
//TODO状态处理500200
if(response.getStatusLine().getStatusCode()==200){
BufferedReaderbufferedReader2=newBufferedReader(
newInputStreamReader(response.getEntity().getContent()));
for(Strings=bufferedReader2.readLine();s!=null;s=bufferedReader2
.readLine()){
sb.append(s);
}
}
}
/**
*向服务器发送信息
*
*@paramkey
*@paramvalue
*/
publicvoidaddNameValuePair(Stringkey,Stringvalue){
nameValuePair.add(newBasicNameValuePair(key,value));
}
/**
*返回JSONObject对象数据模型
*
*@return
*@throwsJSONException
*/
publicJSONObjectgetJSON()throwsJSONException{
returnnewJSONObject(sb.toString());
}
}
接着是登陆协议,在这里我只是模拟登陆使用的一个类,仅供大家参考:
packagecom.jclick.protocol;
importorg.json.JSONObject;
importcom.jclick.bean.User;
{
privatefinalstaticStringURL="http://localhost:8080/test/login";
publicbooleancheckLogin(Userusr){
try{
pack(URL);
parse();
JSONObjectobj=this.getJSON();
if(obj.getString("result").equals("failed")){
returnfalse;
}else{
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
}
}
packagecom.jclick.protocol;
importorg.json.JSONObject;
importcom.jclick.bean.User;
{
privatefinalstaticStringURL="http://localhost:8080/test/login";
publicbooleancheckLogin(Userusr){
try{
pack(URL);
parse();
JSONObjectobj=this.getJSON();
if(obj.getString("result").equals("failed")){
returnfalse;
}else{
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
}
}
然后是User实体类,主要用于保存用户信息:
packagecom.jclick.bean;
publicclassUser{
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
packagecom.jclick.bean;
publicclassUser{
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
最后就是LoginActivity里边判断登陆的代码了,详细代码不再贴出来了,仅贴一个判断登陆的代码:
privatevoidcheckedData(){
username=((EditText)findViewById(R.id.username)).getText().toString();
password=((EditText)findViewById(R.id.password)).getText().toString();
Useruser=newUser();
user.setUsername(username);
user.setPassword(password);
LoginProtocollogin=newLoginProtocol();
booleanresult=login.checkLogin(user);
if(result){SpiderCache.getInstance().setUserSession(user);
Toast.makeText(getApplicationContext(),"登录成功",1000).show();
Intentintent=newIntent();
intent.setClass(LoginActivity.this,WelcomeActivity.class);
startActivity(intent);
}else{Toast.makeText(LoginActivity.this,"密码或用户名不匹配,请重新输入!",1000).show();
}
}
privatevoidcheckedData(){
username=((EditText)findViewById(R.id.username)).getText().toString();
password=((EditText)findViewById(R.id.password)).getText().toString();
Useruser=newUser();
user.setUsername(username);
user.setPassword(password);
LoginProtocollogin=newLoginProtocol();
booleanresult=login.checkLogin(user);
if(result){ SpiderCache.getInstance().setUserSession(user);
Toast.makeText(getApplicationContext(),"登录成功",1000).show();
Intentintent=newIntent();
intent.setClass(LoginActivity.this,WelcomeActivity.class);
startActivity(intent);
}else{ Toast.makeText(LoginActivity.this,"密码或用户名不匹配,请重新输入!",1000).show();
}
}
以上代码为了跟大家分享一下,感觉手机端和服务器双向开发非常过瘾。同时对Android的兴趣大大提升,它也没有我们想象中的那么难。
8. 手机怎么与服务器建立安全连接
首先,手机要通过无线网络协议,从基站获得无线链路分配,才能跟网络进行通讯。无线网络基站、基站控制器这方面,会给手机进行信号的分配,已完成手机连接和交互。
获得无线链路后,会进行网络附着、加密、鉴权,核心网络会检查你是不是可以连接在这个网络上,是否开通套餐,是不是漫游等。核心网络有SGSN 和GGSN,在这一步完成无线网络协议和有线以太网的协议转换。再下一步,核心网络会给你进行APN 选择、IP 分配、启动计费。再往下面,才是传统网络的步骤:DNS 查询、响应,建立TCP 链接,HTTP GET,RTTP,RESPONSE 200 OK,HTTP RESPONSE DATA,LAST HTTP RESPONSE DATA,开始UI展现。
9. 手机的交互方式有哪些
移动互联网是未来的发展趋势,随着移动设备硬件性能的提升和移动系统的更新,交互设计也被逐渐重视,不再是简单的将内容从互联网平台照搬至移动平台,而是解决产品在界面、使用情景、操作流程等方面的用户体验。手机作为移动互联网最主要的载体,从用户需求触发,在内容呈现、信息架构、交互操作等方面挖掘设计的可能性,是手机交互设计未来需要重点关注的设计趋势。一、手势
有一个词叫“指手划脚”,手势是人类沟通交流不可分割的一部分。对机器能不能用手势来沟通呢?现在有“智能手势识别”技术,开辟了我们与电脑、平板、手机间新的沟通方式。这主要是通过摄像头跟踪进行手势识别,从而控制设备的操作,是一种很智能的人机交互方式。市场研究机构ABIResearch公布的一项最新研究预测,到2017年,具有视觉手势识别功能的智能手机出货量将达6亿部。
隔空玩“切水果”已经可以应用。我们还可以将其应用在传送文件上,先在一台设备上选择想要传输的文件,抓上拖拽到另一台设备上,即可完成传输;或者是在餐馆点餐,食客隔空一点,就选中想要的菜;或者还可控制那些没有显示屏的设备,挥挥手,空调开了,电灯亮了。
二、语音
语音是现在应用比较多的交互方式。现在发短信、打电话、设闹钟、记笔记,很多人都开始“动口”来做。除了像苹果的Siri这种厂商自带的应用外,还有类似“灵犀”这样可以用在各种不同手机上的应用 ,而且十分智能。我们家的小朋友,曾经企图用“语音”来做作业,问出了“怎么组词”的问题,“灵犀”的回答是“自己的事情自己做”!:)
不管怎么样,语音识别开启了人机交互新的方式。个人十分看好搜索领域用上语音交互技术。而因为要和远端服务器对话,通常这类应用对网络的依赖很强。
三、默读
出声操作手机不稀奇,将来不出声,终端都能知道你要干什么。这用的是“默读识别”。不需要发出声音,系统就可以将喉部声带动作发出的电信号转换成语音,从而破译人想说的话。工作原理是当一个人默念或者低语时,不论有没有实际的唇部和脸部动作,都会产生相应的生物学信号。只要在人体下巴和喉结两侧固定钮扣大小的特殊传感器,就可以捕获大脑向发声器官发出的指令,并将这些信号“阅读”出来。目前美国宇航局艾姆斯研究中心正在开发,根据该项目首席科学家恰克•乔金森表示,几年之后,无声语音识别技术就能够进入商业应用。
可应用的场景包括杂闹环境,或是水下、太空等不方便说话的地方;还能帮助有语言障碍的人士同外界交流。将来也有可能尝试利用无声语音识别系统来控制各种外设终端(比如隔空取物?)。
四、眼动
已发布的三星GALAXY S4即以“眼球追踪”为卖点。利用这项技术,可以实现在三星自有浏览器上自动翻页。其基本工作原理是利用图像处理技术,使用摄像头连续地记录视线变化,追踪视觉注视频率以及注视持续时间长短,从而分析判断出用户的行为并反应。
这将会很受商家欢迎,因为能记录用户视线目光的转移,从而知道用户对什么东西感兴趣。这项技术也有助于行动不方便的人与世界沟通。或者将来用户将目光聚集在屏幕的特定区域,就能发送邮件,打出电话。当然还有可穿戴式设备,也可以借助眼动跟踪技术,更加方便地完成输入操作。
五、指纹
苹果在发布iPhone 5s的时候,除了64位的A7,更是把指纹识别当做5s空前、超前的卖点。除了类似解锁加密保护等信息安全的功用外,指纹识别更是一种全新的交互方式。
比如支付领域,转账汇款、余额查询、付款交易,指纹一刷就成。鉴于我们有十个手指,或者我们可用一个手指指纹做登录密码,再找一个手指作为支付密码?如果将我们的十个手指头配备上不同的指令,与手机交互,操作就更为简便了:食指打电话,中指发短信,小指打开邮件界面,再来个手指开关数据网络…
10. android平台的app 手机客户端和后台服务器怎么进行数据交互的
首先不要管安卓端还是苹果端,现在一般都是响应式的app,你放到安卓或者苹果或者pc或者平板都是没有问题的。一般采用的是http接口通讯,或者socket连接。具体你要去查资料找Demo了。而且现在主流是采用html5开发或者混合开发了。所以最好是服务器提供appAPI接口,通过http访问服务器,获取数据,数据一般是json,或者xml,拿到后解析数据就可以了,然后再用UI框架或者其他框架或者自定义的UI封装下格式很漂亮了,至于cookie和session等,看你的习惯,网络验证和签名那些也自己看习惯,如果涉及到大数据,还需要引入第三方框架的,直接引入就可以了,不过推荐自己写,防止侵权。都是很通用的。