最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android之網(wǎng)絡(luò)通信案例分析

 更新時(shí)間:2012年11月21日 10:35:28   作者:  
由于一個(gè)項(xiàng)目的需要,我研究了一下android的網(wǎng)絡(luò)通信方式,大體和java平臺(tái)的很相似,需要的朋友可以參考下
由于一個(gè)項(xiàng)目的需要,我研究了一下android的網(wǎng)絡(luò)通信方式,大體和java平臺(tái)的很相似!
 
android平臺(tái)也提供了很多的API供開(kāi)發(fā)者使用,請(qǐng)按示例圖:
 
首先,介紹一下通過(guò)http包工具進(jìn)行通信,分get和post兩種方式,兩者的區(qū)別是:
1,post請(qǐng)求發(fā)送數(shù)據(jù)到服務(wù)器端,而且數(shù)據(jù)放在html header中一起發(fā)送到服務(wù)器url,數(shù)據(jù)對(duì)用戶不可見(jiàn),get請(qǐng)求是把參數(shù)值加到url的隊(duì)列中,這在一定程度上,體現(xiàn)出post的安全性要比get高
2,get傳送的數(shù)據(jù)量小,一般不能大于2kb,post傳送的數(shù)據(jù)量大,一般默認(rèn)為不受限制。
訪問(wèn)網(wǎng)絡(luò)要加入權(quán)限 <uses-permission android:name="android.permission.INTERNET" />
下面是get請(qǐng)求HttpGet時(shí)的示例代碼:
復(fù)制代碼 代碼如下:

View Code
// 創(chuàng)建DefaultHttpClient對(duì)象
HttpClient httpClient = new DefaultHttpClient();
// 創(chuàng)建一個(gè)HttpGet對(duì)象
HttpGet get = new HttpGet(
"http://192.168.1.88:8888/foo/secret.jsp");
try
{
// 發(fā)送GET請(qǐng)求
HttpResponse httpResponse = httpClient.execute(get);
HttpEntity entity = httpResponse.getEntity();
if (entity != null)
{
// 讀取服務(wù)器響應(yīng)
BufferedReader br = new BufferedReader(
new InputStreamReader(entity.getContent()));
String line = null;
response.setText("");
while ((line = br.readLine()) != null)
{
// 使用response文本框顯示服務(wù)器響應(yīng)
response.append(line + "\n");
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

post請(qǐng)求HttpPost的示例代碼:
復(fù)制代碼 代碼如下:

View Code
HttpClient httpClient=new DefaultHttpClient();
HttpPost post = new HttpPost(
"http://192.168.1.88:8888/foo/login.jsp");
// 如果傳遞參數(shù)個(gè)數(shù)比較多的話可以對(duì)傳遞的參數(shù)進(jìn)行封裝
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("pass", pass));
try
{
// 設(shè)置請(qǐng)求參數(shù)
post.setEntity(new UrlEncodedFormEntity(
params, HTTP.UTF_8));
// 發(fā)送POST請(qǐng)求
HttpResponse response = httpClient
.execute(post);
// 如果服務(wù)器成功地返回響應(yīng)
if (response.getStatusLine()
.getStatusCode() == 200)
{
String msg = EntityUtils
.toString(response.getEntity());
// 提示登錄成功
Toast.makeText(HttpClientTest.this,
msg, 5000).show();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

其次,介紹一下,使用java包的工具進(jìn)行通信,也分get和post方式
默認(rèn)使用get方式,示例代碼:
復(fù)制代碼 代碼如下:

View Code
try
{
String urlName = url + "?" + params;
URL realUrl = new URL(urlName);
// 打開(kāi)和URL之間的連接或者HttpUrlConnection
URLConnection conn =realUrl.openConnection();
// 設(shè)置通用的請(qǐng)求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
// 建立實(shí)際的連接
conn.connect();
// 獲取所有響應(yīng)頭字段
Map<String, List<String>> map = conn.getHeaderFields();
// 遍歷所有的響應(yīng)頭字段
for (String key : map.keySet())
{
System.out.println(key + "--->" + map.get(key));
}
// 定義BufferedReader輸入流來(lái)讀取URL的響應(yīng)
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null)
{
result += "\n" + line;
}
}
catch (Exception e)
{
System.out.println("發(fā)送GET請(qǐng)求出現(xiàn)異常!" + e);
e.printStackTrace();
}
// 使用finally塊來(lái)關(guān)閉輸入流

使用post的示例代碼:
復(fù)制代碼 代碼如下:

View Code
try
{
URL realUrl = new URL(url);
// 打開(kāi)和URL之間的連接
URLConnection conn = realUrl.openConnection();
// 設(shè)置通用的請(qǐng)求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
// 發(fā)送POST請(qǐng)求必須設(shè)置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
// 獲取URLConnection對(duì)象對(duì)應(yīng)的輸出流
out = new PrintWriter(conn.getOutputStream());
// 發(fā)送請(qǐng)求參數(shù)
out.print(params);
// flush輸出流的緩沖
out.flush();
// 定義BufferedReader輸入流來(lái)讀取URL的響應(yīng)
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null)
{
result += "\n" + line;
}
}
catch (Exception e)
{
System.out.println("發(fā)送POST請(qǐng)求出現(xiàn)異常!" + e);
e.printStackTrace();
}

從以上知,get請(qǐng)求只需要conn.connect(),post請(qǐng)求時(shí),必須設(shè)置 conn.setDoOutput(true),conn.setDoinput(true),還必須獲取URLConnection的輸出流getOutputStream()
最后,使用套接字(soket)進(jìn)行通信分為兩種形式:面向連接的(tcp)和無(wú)連接的(udp 數(shù)據(jù)報(bào))
tcp連接示例:
復(fù)制代碼 代碼如下:

View Code
//服務(wù)器端
//創(chuàng)建一個(gè)ServerSocket,用于監(jiān)聽(tīng)客戶端Socket的連接請(qǐng)求
ServerSocket ss = new ServerSocket(30000);
//采用循環(huán)不斷接受來(lái)自客戶端的請(qǐng)求
while (true)
{
//每當(dāng)接受到客戶端Socket的請(qǐng)求,服務(wù)器端也對(duì)應(yīng)產(chǎn)生一個(gè)Socket
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
os.write("您好,您收到了服務(wù)器的消息!\n"
.getBytes("utf-8"));
//關(guān)閉輸出流,關(guān)閉Socket
os.close();
s.close();
}
//客戶端
Socket socket = new Socket("192.168.1.88" , 30000);
//將Socket對(duì)應(yīng)的輸入流包裝成BufferedReader
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//進(jìn)行普通IO操作
String line = br.readLine();
show.setText("來(lái)自服務(wù)器的數(shù)據(jù):" + line);
br.close();
socket.close();

udp連接示例:
復(fù)制代碼 代碼如下:

View Code
服務(wù)器端:
try {
//創(chuàng)建一個(gè)DatagramSocket對(duì)象,并指定監(jiān)聽(tīng)的端口號(hào)
DatagramSocket socket = new DatagramSocket(4567);
byte data [] = new byte[1024];
//創(chuàng)建一個(gè)空的DatagramPacket對(duì)象
DatagramPacket packet = new DatagramPacket(data,data.length);
//使用receive方法接收客戶端所發(fā)送的數(shù)據(jù)
socket.receive(packet);
String result = new String(packet.getData(),packet.getOffset(),packet.getLength());
System.out.println("result--->" + result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
客戶端:
try {
//首先創(chuàng)建一個(gè)DatagramSocket對(duì)象
DatagramSocket socket = new DatagramSocket(4567);
//創(chuàng)建一個(gè)InetAddree
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello";
byte data [] = str.getBytes();
//創(chuàng)建一個(gè)DatagramPacket對(duì)象,并指定要講這個(gè)數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)當(dāng)中的哪個(gè)地址,以及端口號(hào)
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);
//調(diào)用socket對(duì)象的send方法,發(fā)送數(shù)據(jù)
socket.send(packet);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

以上,是我的總結(jié),最近正在做一個(gè)類似網(wǎng)絡(luò)視頻客戶端的作品,如果大家有人做過(guò)這方面,歡迎您們提出建議和實(shí)現(xiàn)終端和服務(wù)器訪問(wèn)的其他方法。謝謝!
與大家共勉?。?!

相關(guān)文章

  • android讀取assets文件示例

    android讀取assets文件示例

    這篇文章主要介紹了android讀取assets文件示例,需要的朋友可以參考下
    2014-02-02
  • Android 多用戶詳情

    Android 多用戶詳情

    這篇文章主要以Linux 用戶和組詳細(xì)的介紹了Android 多用戶的內(nèi)容,感興趣的小伙伴可以參考下文,希望文章能get到你的點(diǎn)
    2021-08-08
  • Android利用ContentProvider獲取聯(lián)系人信息

    Android利用ContentProvider獲取聯(lián)系人信息

    這篇文章主要為大家詳細(xì)介紹了Android利用ContentProvider獲取聯(lián)系人信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Android:下拉刷新+加載更多+滑動(dòng)刪除實(shí)例講解

    Android:下拉刷新+加載更多+滑動(dòng)刪除實(shí)例講解

    本文主要講解 Android下拉刷新+加載更多+滑動(dòng)刪除的示例,這里整理了相關(guān)資料并附示例代碼供大家學(xué)習(xí)參考,有需要的小伙伴可以參考下
    2016-08-08
  • Google大佬都用的廣播goAsync源碼分析

    Google大佬都用的廣播goAsync源碼分析

    這篇文章主要為大家介紹了Google大佬都用的廣播?goAsync源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 在android中實(shí)現(xiàn)類似uc和墨跡天氣的左右拖動(dòng)效果

    在android中實(shí)現(xiàn)類似uc和墨跡天氣的左右拖動(dòng)效果

    本文主要介紹下怎樣在android實(shí)現(xiàn)uc和墨跡天氣那樣的左右拖動(dòng)效果,具體代碼如下,感興趣的朋友可以參考下哈
    2013-06-06
  • Kotlin與Java相互調(diào)用的完整實(shí)例

    Kotlin與Java相互調(diào)用的完整實(shí)例

    Kotlin的設(shè)計(jì)過(guò)程中就考慮到了與Java的互操作性,在Kotlin中可以直接調(diào)用既有的Java代碼,反過(guò)來(lái)在Java中也可以很流暢地使用Kotlin代碼,這篇文章主要給大家介紹了關(guān)于Kotlin與Java相互調(diào)用的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Android6.0仿微信權(quán)限設(shè)置

    Android6.0仿微信權(quán)限設(shè)置

    這篇文章主要為大家詳細(xì)介紹了Android6.0仿微信權(quán)限設(shè)置的相關(guān)內(nèi)容,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android開(kāi)心消消樂(lè)代碼實(shí)例詳解

    Android開(kāi)心消消樂(lè)代碼實(shí)例詳解

    這篇文章主要介紹了Android開(kāi)心消消樂(lè)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Android開(kāi)機(jī)畫(huà)面的具體修改方法

    Android開(kāi)機(jī)畫(huà)面的具體修改方法

    Android開(kāi)機(jī)畫(huà)面的具體修改方法,需要的朋友可以參考一下
    2013-06-06

最新評(píng)論

万载县| 晋江市| 托里县| 会理县| 溆浦县| 漳平市| 会同县| 呈贡县| 岳普湖县| 密云县| 柘城县| 慈溪市| 新蔡县| 高雄县| 河间市| 洪洞县| 广灵县| 钦州市| 和静县| 景泰县| 安泽县| 泰来县| 石狮市| 清水县| 都昌县| 临海市| 永吉县| 通河县| 新巴尔虎左旗| 任丘市| 团风县| 宁远县| 灌云县| 林甸县| 永靖县| 临安市| 鄂州市| 温州市| 蒙阴县| 太仓市| 曲水县|