導航:首頁 > IDC知識 > 安卓http伺服器

安卓http伺服器

發布時間:2020-10-24 10:16:47

1、Android伺服器通信的幾種方式詳解

大 學學習網路基礎的時候老師講過,網路由下往上分為物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層。通過初步的了解,我知道IP協議對應於網 絡層,TCP協議對應於傳輸層,而HTTP協議對應於應用層,三者從本質上來說沒有可比性,socket則是對TCP/IP協議的封裝和應用(程序員層面 上)。也可以說,TPC/IP協議是傳輸層協議,主要解決數據如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和 HTTP協議的關系,網路有一段比較容易理解的介紹: 「我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使 用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝 HTTP文本信息,然後使用TCP/IP做傳輸層協議將它發到網路上。」
而我們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API), 通過Socket,我們才能使用TCP/IP協議。實際上,Socket跟TCP/IP協議沒有必然的聯系。Socket編程介面在設計的時候,就希望也 能適應其他的網路協議。所以說,Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道 的一些最基本的函數介面,比如create、listen、connect、accept、send、read和write等等。網路有一段關於 socket和TCP/IP協議關系的說法比較容易理解:「TCP/IP只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外 的操作介面。這個就像操作系統會提供標準的編程介面,比如win32編程介面一樣,TCP/IP也要提供可供程序員做網路開發所用的介面,這就是 Socket編程介面。」
關於TCP/IP協議的相關只是,用博大精深來講我想也不為過,單單查一下網上關於此類只是的資料和書籍文獻的數量就知道,這個我打算會買一些經典的書籍 (比如《TCP/IP詳解:卷一、卷二、卷三》)進行學習,今天就先總結一些基於基於TCP/IP協議的應用和編程介面的知識,也就是剛才說了很多的 HTTP和Socket。
CSDN上有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網路通信的能力。
實際上,傳輸層的TCP是基於網路層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的介面。
下面是一些經常在筆試或者面試中碰到的重要的概念,特在此做摘抄和總結。
一。什麼是TCP連接的三次握手
第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉 連接之前,TCP 連接都將被一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過「四次握手」(過程就不細寫了,就是伺服器和客 戶端交互,最終確定斷開)
二。利用Socket建立網路連接的步驟
建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
套接字之間的連接過程分為三個步驟:伺服器監聽,客戶端請求,連接確認。
1。伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。
2。客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連接請求。
3。 連接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給客戶 端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。
三。HTTP鏈接的特點
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。
四。TCP和UDP的區別(考得最多。。快被考爛了我覺得- -\\)
1。 TCP是面向鏈接的,雖然說網路的不安全不穩定特性決定了多少次握手都不能保證連接的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上保證 了)保證了連接的可靠性;而UDP不是面向連接的,UDP傳送數據前並不與對方建立連接,對接收到的數據也不發送確認信號,發送端不知道數據是否會正確接 收,當然也不用重發,所以說UDP是無連接的、不可靠的一種數據傳輸協議。
2。也正由於1所說的特點,使得UDP的開銷更小數據傳輸速率更高,因為不必進行收發數據的確認,所以UDP的實時性更好。
知 道了TCP和UDP的區別,就不難理解為何採用TCP傳輸協議的MSN比採用UDP的QQ傳輸文件慢了,但並不能說QQ的通信是不安全的,因為程序員可以 手動對UDP的數據收發進行驗證,比如發送方對每個數據包進行編號然後由接收方進行驗證啊什麼的,即使是這樣,UDP因為在底層協議的封裝上沒有採用類似 TCP的「三次握手」而實現了TCP所無法達到的傳輸效率。

2、如何在 android 本地搭建一個 http 伺服器

ApacheHttpCore是一個優秀的Http底層框架,支持構建伺服器,支持構建客戶端,所以專我們第一個版本選屬擇了Apache的HttpCore,因為Android棄用了ApacheHttpClient相關API,代碼中會有棄用的警告,不過這一點大家不要擔心,下面會給出解決方案。
http://blog.csdn.net/yanzhenjie1003/article/details/51661599

3、求高人指點, 如何在android<手機>上建立http伺服器?

別折騰了,這個不現實。http伺服器,搭建要是一系列的伺服器組件和軟體支持來實現的,手機只是別一個平台,想實現就得有這些軟體,目前好像還沒有支持手機平台的相關軟體。

4、如何在安卓上搭建http伺服器

轉載 本文介紹如何在安卓手機上搭建http伺服器,有時候我們會有這要的需求,那就是想在自己的安卓手機上搭建一個簡單的http服務里,有人是想用來玩一玩,有人是想做點研究,還有人有其他的目的,那麼我們該怎麼在安卓上搭建一個http伺服器呢,下面安卓後院 為大家收集整理的一個方法,希望能夠幫到大家。

一、准備篇

1.將lmp.tar.bz2移動到SD卡根目錄(/mnt/sdcard/)

2.安裝安卓終端模擬器(TerminalEmulator.apk)

(註:lmp.tar.bz2文件可以在本站的安卓工具箱頁面下下載)

二、安裝篇

1.打開安卓終端模擬器

2.執行以下命令(root)

$ su

# cd /

# mount -o remount,rw /system

# tar xf /mnt/sdcard/lmp.tar.bz2

# mount -o remount,ro /system

# exit

$ exit

三、啟動篇

1.打開安卓終端模擬器

2.執行以下命令(root)

$ su

# almp-start.sh

# exit

$ exit

三、關閉篇

1.打開安卓終端模擬器

2.執行以下命令(root)

$ su

# almp-stop.sh

# exit

$ exit

四、測試篇

1.打開網路瀏覽器(OperaMobile)

2.輸入以下地址欣賞下您的almp環境吧

http://127.0.0.1/

http://127.0.0.1/fileadmin/

或者

http://localhost/

http://localhost/fileadmin/

*.部分瀏覽器不支持localhost的解析

五、mysql篇

1.mysql用戶名為root

2.mysql默認密碼為空

3.mysql用以下地址訪問

127.0.0.1:3306

localhost:3306

4.推薦phpmyadmin管理您的mysql資料庫

5.由於phpmyadmin更新頻繁,請自己下載安裝

6.phpmyadmin默認不支持空密碼登陸,請自己修改phpmyadmin的配置文件

7.登陸phpmyadmin輕擊修改密碼為您的mysql超級用戶root設置一個密碼吧

六、注意篇

*.php-cgi由本人編譯

1.手機需要有root許可權

2.部分rom需要安裝busybox

3.部分rom需要在命令前面加上busybox

4.本環境包中的部分資源來源於網路開源項目

5.用Re掛載/system分區為讀寫可跳過mount命令

6.執行終端命令時請忽略命令前的命令提示符$(#)

7.本環境包理論上應該工作在Arm5++的安卓手機上

5、如何在手機搭建http伺服器

目前為止不可能實現。你要做伺服器。那肯定得有各種各樣的協議和組件,而手機的系統裡面附帶的都沒有。所以手機目前是無法作為http伺服器的。也包括其他類型的伺服器。

6、如何在 android 本地搭建一個 http 伺服器

這一陣感覺玩手機玩膩了,VPS也玩膩了,瞬間感覺啥都玩膩了。前幾天閑著無聊,看到了手機上的超級終端,心想:安卓底層不也是Linux么?於是就用超級終端wget了一個文件,成功了!吼吼,於是下一個想法就是能不能在手機上搭建一個WEB環境??? 想到就開始各種搜,發現安卓使用的Linux並不屬於任何發行版本,看來使用傳統的建站方式不行了。繼續搜索,發現谷歌商店裡有一個集成lighttpd+php+mysql+phpmyadmin環境的APK,哈哈,這下好了。當然,如果只裝上這個APK只能在本地測試,無法使用公網訪問,所以,經過我各種搜,終於有了這一篇文章,毫不客氣的說,這絕對是全網首發,至少不用讓你再像我一樣各種搜了。 現在的手機硬體已經很強大了,¥1999就能買到4核1.5G,2G內存的手機,這幾乎能滿足像我這樣的小站的需求了。硬體有了,集成環境的APK也有了,就剩下公網訪問了。 第一:需要一部安卓手機,至少600MHZ的CPU,256內存,手機需要ROOT,沒有ROOT的話,不能使用80埠。 第二:下載我提供的集成環境的APK文件(這里)解壓密碼:,KSWEB在谷歌商店裡是收費的,免費試用5天,我提供的這個文件為網友破解版,免費試用55年,夠你折騰了。 第三:需要一個支持路由功能的路由器,以及一個花生殼賬號。 1.首先在手機上安裝APK,(如果手機里有什麼防火牆之類的,請關閉,否則不能使用WIFI地址訪問),然後點開KSWEB,首次開啟,會解壓縮文件,然後會提示重啟,重啟後,就能夠看到mysql啟動和相應信息了。 2.點options進入設置,然後勾選上root許可權,這樣就可以更改埠為80了。然後回到主界面,點phpmyadmin然後就會自動下載了。下載成功後,可以在手機瀏覽器里輸入127.0.0.1,就可以看到相關信息。雖然版本有些老,但是相當簡便啊親…… 如果你只想在手機上測試,那麼到這里就結束了。如果想讓公網訪問手機, 那麼就需要使用DDNS(動態域名解析)來支持。 3.使用oray護照,登錄花生殼,系統會自動分配給你一個免費域名,用這個域名來訪問手機。登錄你的路由器,點擊“轉發規則”,選擇“虛擬伺服器”,埠填寫80,IP地址填寫你手機WIFI的IP地址,保存,如圖所示。 4.保存後,點擊“動態DNS設置”,賬號密碼就是你oray的通行證,點登錄,如果成功了,就會自動識別你的免費域名。如圖所示,然後保存就行了。 這樣的話,直接輸入域名就可以訪問到手機了,只要你的路由器不關閉,就可以一直使用了。下面是我的演示: 至此,你的手機就可以當成一個獨立的VPS來使用了,建議使用閑置的手機來玩,它有以下幾個好處:裝13,夠折騰,省電省資源,廢物利用,數據更安全,便攜,國內速度一流……還有,查域名的時候貌似是獨立IP,這樣百度會不會喜歡呢?

7、如何在 android 本地搭建一個 http 伺服器

小鳥雲伺服器niaoyun實例創建好之後,您可以使用以下任意一種方式登錄伺服器:

遠程桌面連接(,MSTSC):採用這種方式登錄,請確保實例能訪問公網。如果在創建實例時沒有購買帶寬,則不能使用遠程桌面連接。

管理終端VNC:無論您在創建實例時是否購買了帶寬,只要您本地有網頁瀏覽器,都可以通過管理控制台的管理終端登錄實例。

使用遠程桌面連接(MSTSC)登錄實例

打開開始菜單>遠程桌面連接,或在開始菜單>搜索中輸入mstsc。也可以使用快捷鍵Win+R來啟動運行窗口,輸入mstsc後回車啟動遠程桌面連接。

在遠程桌面連接對話框中,輸入實例的公網IP地址。單擊顯示選項。

輸入用戶名,如小鳥雲默認為niaoyun。單擊允許我保存憑據,然後單擊連接。這樣以後登錄就不需要手動輸入密碼了。

8、Android通過OKhttp從伺服器端獲取數據

①簡單的非同步Get請求
第一步,創建OKHttpClient對象
第二步,創建Request請求
第三步,創建一個Call對象
第四步,將請求添加到調度中
不多說,直接上代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

//okHttp的基本使用 --- get方法
String url = "https://api.douban.com/v2/movie/top250?start=0&count=10";
//1,創建OKHttpClient對象
OkHttpClient mOkHttpClient = new OkHttpClient();
//2,創建一個Request
Request request = new Request.Builder().url(url).build();
//3,創建一個call對象
Call call = mOkHttpClient.newCall(request);
//4,將請求添加到調度中
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

}

@Override
public void onResponse(Response response) throws IOException {
if (response.isSuccessful()) {
final String message = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
tv_message.setText(message);
progressBar.setVisibility(View.GONE);
}
});

}
}

});

9、android使用http怎麼向伺服器獲得數據並用json解析

寫個適配器

下面是代碼:

import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.HttpsURLConnection;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import bean.CoureBean;

import tools.StreamHelper;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.VisibleForTesting;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

private List<CoureBean> list = new ArrayList<CoureBean>();
private ListView lv;

private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {

switch (msg.what) {
case 1:
String jsonString = msg.obj.toString();

converData(jsonString);
init();
break;

default:
break;
}
};
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lvImgList);
getJson();
}

// 綁定列表
private void converData(String jsonString) {
try {
JSONObject jOb = new JSONObject(jsonString);
JSONArray jArray = jOb.getJSONArray("Data");
for (int i = 0; i < jArray.length(); i++) {
JSONObject currentItem = jArray.getJSONObject(i);
CoureBean modelBean = new CoureBean();
modelBean.setName(currentItem.getString("name"));
modelBean.setImgUrl(currentItem.getString("picSmall"));
list.add(modelBean);

}

} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

// 獲取json數據
private void getJson() {
new Thread() {
@Override
public void run() {
String strUrlString = "http://www.imooc.com/api/teacher?type=4&num=30";
try {
URL url = new URL(strUrlString);
HttpsURLConnection conn = (HttpsURLConnection) url
.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);

int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
String jsonString = StreamHelper.readInputStream(is);
Message msg = new Message();
msg.what = 1;
msg.obj = jsonString;
handler.sendMessage(msg);

}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}

class ViewHolder {
ImageView imPic;
TextView txtName;

}
private void init(){
ArrayAdapter adapter = new MyAdapter(this, R.layout.list_item, list);
lv.setAdapter(adapter);
}

/**
 * 自定義適配器(內部類)
 * 
 * @author
 * 
 */
class MyAdapter extends ArrayAdapter<CoureBean> {
private int resourceId;

// 構造函數
public MyAdapter(Context context, int resource, List<CoureBean> objects) {
super(context, resource, objects);
resourceId = resource;
}

@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, ViewGroup parent) {

View view;
ViewHolder viewHolder = new ViewHolder();

if (convertView == null) {
view = LayoutInflater.from(MainActivity.this).inflate(
resourceId, null);// 拿到當前行對象

// 拿到當前視圖對象裡面的名字叫tvPwdTitle的TextView對象
viewHolder.txtName = (TextView) view.findViewById(R.id.txtName);
viewHolder.imPic = (ImageView) view
.findViewById(R.id.imageView1);
view.setTag(viewHolder);

} else {
view = convertView;
}

// 拿到應該放在當前行上的數據
final CoureBean dataItem = getItem(position);
viewHolder = (ViewHolder) view.getTag();
viewHolder.txtName.setText(dataItem.getName());
return view;
}
}
}

與安卓http伺服器相關的知識