移動應用如何與伺服器交互
⑴ ios與伺服器如何進行數據交互
http socket都行啊
⑵ 如何實現客戶端與伺服器的交互
C/S模式和B/S各有其有點也各有其缺點,B/S模式在開發中需要考慮數據如何從客戶端提交到伺服器端,數據又如何返回到客戶端,這些是B/S模式所特有的,在去年之前,開發B/S模式的程序,我都是利用form來交互數據,當我看到XML之後,發現XML是個好冬冬,有很多優點,有好的東西當然不能獨享啦,想當年為了實現XML交互數據,幾乎把網路翻了個遍。咚,一塊磚頭上來了。呵呵,廢話少說,下面我們就進入正題。
B/S模式分為伺服器端和客戶端,客戶端接受用戶的請求,客戶端向應用服務提出請求,應用服務從資料庫服務中獲得數據,應用服務將數據進行計算並將結果提交給客戶端,客戶端將結果呈現給用戶。這樣,我們就看到了數據從客戶到伺服器,經過伺服器的處理再返回到客戶端,由客戶端軟體(如IE)顯示結果。
(以ASP教本語言為例,其它的語言一樣哈。)
1.Form方式
Form方式是最基本的向伺服器提交數據的方式。
test.asp文件代碼:
<%@ Language=VBScript %>
<%
Response.Expires=-1
Response.CharSet="UTF-8"
Session.CodePage="65001"
%>
<form name="frmTest" id="frmTest" action="test.asp" method="POST">
<input name="name" id=" name" type="text" value="">
<input type="hidden" name="number" id="number" value="10">
<input type="submit" value="Submit" name="B1">
</form>
<%
dim intnumber
dim strname
if IsEmpty(Request("name")) then
strname =""
else
strname =Request("name")
end if
if IsEmpty(Request("number")) then
intnumber =0
else
intnumber =Request("number")
end if
⑶ 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;
}
⑷ 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的興趣大大提升,它也沒有我們想像中的那麼難。
⑸ 如何做到讓不斷移動的終端(如pos機)與伺服器上的資料庫進行實時的數據交互
一般現在的終端(如pos機)都是通過物理介質(如識別卡物理介質,識別通信媒體物理介質等)實現數據的真正交互,比例POS機來講吧,使用POS機的時候,都會通過物理介質去從庫存管理子系統獲得商品信息和客戶充值信息,同時寫入卡中充值和消費金額,在卡中扣款,生成消費記錄,再上傳給庫存管理子系統,實現數據同步。
手持POS機有簽到和簽退兩種狀態。簽到狀態下,可以消費,機器不可以拿到異地使用,若要拿到異地使用,必須先簽退。簽退狀態下,不可以消費,可以拿到異地使用。POS先進通訊界面,被動接收後台的指令並作出響應,即可以再重新使用POS機了。這就是POS機與伺服器實現數據同步的原理。
⑹ android平台的app 手機客戶端和後台伺服器怎麼進行數據交互的
首先不要管安卓端還是蘋果端,現在一般都是響應式的app,你放到安卓或者蘋果或者pc或者平板都是沒有問題的。一般採用的是http介面通訊,或者socket連接。具體你要去查資料找Demo了。而且現在主流是採用html5開發或者混合開發了。所以最好是伺服器提供appAPI介面,通過http訪問伺服器,獲取數據,數據一般是json,或者xml,拿到後解析數據就可以了,然後再用UI框架或者其他框架或者自定義的UI封裝下格式很漂亮了,至於cookie和session等,看你的習慣,網路驗證和簽名那些也自己看習慣,如果涉及到大數據,還需要引入第三方框架的,直接引入就可以了,不過推薦自己寫,防止侵權。都是很通用的。
⑺ android客戶端如何與後台java伺服器交互
php做前端,java做後端淘寶是個例子伺服器端前後分開是為了兩方面,雖然淘寶最開始並不想這樣做。。。先說下歷史,淘寶是最開始php全部,後來發現開銷太大,代碼效率不行,就直接把數據存儲啊,用戶通知啊就交給java實際上大部分網站都樂意採用這種前端php後端java或者c++這種形式,我是phpc++這種。優點,核心動作效率肯定高,c++java這種代碼效率奇高。比php腳本好很多。前端php,語法簡單,維護簡單,部署簡單,而且容易找到維護人員。總之就是開發快,維護成本低。大致了解了嗎?你說的h5+java實際上就是把java提到前台,不是不可以,維護和開發成本太高了啊。前端開發要經常搞,但是java做前台要調試、編譯部署還要重編譯。麻煩,人工開銷也大。不劃算如果是.net技術就更高成本了。光伺服器軟體一塊就要多少了。所以微軟的框架用的不多。國內外都不多,用.met的成本開發維護都麻煩。要氣硬體條件還苛刻。
⑻ 如何搭建一個與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()? 的異常。
⑼ 請高手詳細說說web伺服器與應用伺服器之間交互的方式,非常感謝。。。
通訊協議上,http/tcp/udp/ftp..........兩台伺服器之間交互想怎麼交互就怎麼交互,你的程序怎麼寫他就怎麼交互。
技術上面,webService、EJB、COM+、WCF、REST啥啥都行
⑽ app與伺服器怎麼交互實現注冊和登錄功能 ios
沒做過iOS上app的登錄注冊,做過WP端的。當時的做法是,用戶注冊時,根據用戶名在輸入框里輸入的密碼轉為md5加密的格式得到結果,加上用戶輸入的用戶名,上傳到伺服器端,伺服器返回結果檢驗是否注冊成功。如果伺服器的結果表示注冊成功,則在本地保存用戶密碼的md5加密結果和用戶名文件,以後自動登錄時使用本地文件和伺服器溝通。