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

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

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

View Code
// 創(chuàng)建DefaultHttpClient對象
HttpClient httpClient = new DefaultHttpClient();
// 創(chuàng)建一個HttpGet對象
HttpGet get = new HttpGet(
"http://192.168.1.88:8888/foo/secret.jsp");
try
{
// 發(fā)送GET請求
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請求HttpPost的示例代碼:
復(fù)制代碼 代碼如下:

View Code
HttpClient httpClient=new DefaultHttpClient();
HttpPost post = new HttpPost(
"http://192.168.1.88:8888/foo/login.jsp");
// 如果傳遞參數(shù)個數(shù)比較多的話可以對傳遞的參數(shù)進行封裝
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("pass", pass));
try
{
// 設(shè)置請求參數(shù)
post.setEntity(new UrlEncodedFormEntity(
params, HTTP.UTF_8));
// 發(fā)送POST請求
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包的工具進行通信,也分get和post方式
默認使用get方式,示例代碼:
復(fù)制代碼 代碼如下:

View Code
try
{
String urlName = url + "?" + params;
URL realUrl = new URL(urlName);
// 打開和URL之間的連接或者HttpUrlConnection
URLConnection conn =realUrl.openConnection();
// 設(shè)置通用的請求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
// 建立實際的連接
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輸入流來讀取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請求出現(xiàn)異常!" + e);
e.printStackTrace();
}
// 使用finally塊來關(guān)閉輸入流

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

View Code
try
{
URL realUrl = new URL(url);
// 打開和URL之間的連接
URLConnection conn = realUrl.openConnection();
// 設(shè)置通用的請求屬性
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請求必須設(shè)置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
// 獲取URLConnection對象對應(yīng)的輸出流
out = new PrintWriter(conn.getOutputStream());
// 發(fā)送請求參數(shù)
out.print(params);
// flush輸出流的緩沖
out.flush();
// 定義BufferedReader輸入流來讀取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請求出現(xiàn)異常!" + e);
e.printStackTrace();
}

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

View Code
//服務(wù)器端
//創(chuàng)建一個ServerSocket,用于監(jiān)聽客戶端Socket的連接請求
ServerSocket ss = new ServerSocket(30000);
//采用循環(huán)不斷接受來自客戶端的請求
while (true)
{
//每當(dāng)接受到客戶端Socket的請求,服務(wù)器端也對應(yīng)產(chǎn)生一個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對應(yīng)的輸入流包裝成BufferedReader
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//進行普通IO操作
String line = br.readLine();
show.setText("來自服務(wù)器的數(shù)據(jù):" + line);
br.close();
socket.close();

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

View Code
服務(wù)器端:
try {
//創(chuàng)建一個DatagramSocket對象,并指定監(jiān)聽的端口號
DatagramSocket socket = new DatagramSocket(4567);
byte data [] = new byte[1024];
//創(chuàng)建一個空的DatagramPacket對象
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)建一個DatagramSocket對象
DatagramSocket socket = new DatagramSocket(4567);
//創(chuàng)建一個InetAddree
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello";
byte data [] = str.getBytes();
//創(chuàng)建一個DatagramPacket對象,并指定要講這個數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)當(dāng)中的哪個地址,以及端口號
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);
//調(diào)用socket對象的send方法,發(fā)送數(shù)據(jù)
socket.send(packet);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

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

相關(guān)文章

  • android讀取assets文件示例

    android讀取assets文件示例

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

    Android 多用戶詳情

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

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

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

    Android:下拉刷新+加載更多+滑動刪除實例講解

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

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

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

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

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

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

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

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

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

    Android開心消消樂代碼實例詳解

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

    Android開機畫面的具體修改方法

    Android開機畫面的具體修改方法,需要的朋友可以參考一下
    2013-06-06

最新評論

永春县| 安阳县| 平陆县| 乌鲁木齐市| 姜堰市| 琼海市| 柯坪县| 望江县| 甘德县| 湘乡市| 金阳县| 南涧| 正定县| 沂水县| 稻城县| 丰顺县| 凤冈县| 灵山县| 长寿区| 镇雄县| 田阳县| 乳山市| 涟水县| 衡山县| 固镇县| 泗水县| 绥中县| 高台县| 神木县| 琼结县| 海口市| 四平市| 南充市| 虎林市| 江阴市| 普定县| 阿城市| 乌恰县| 汶上县| 牟定县| 新宁县|