亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android之網絡通信案例分析

2020-04-11 12:42:02
字體:
來源:轉載
供稿:網友
由于一個項目的需要,我研究了一下android的網絡通信方式,大體和java平臺的很相似!
 
android平臺也提供了很多的API供開發者使用,請按示例圖:
 
首先,介紹一下通過http包工具進行通信,分get和post兩種方式,兩者的區別是:
1,post請求發送數據到服務器端,而且數據放在html header中一起發送到服務器url,數據對用戶不可見,get請求是把參數值加到url的隊列中,這在一定程度上,體現出post的安全性要比get高
2,get傳送的數據量小,一般不能大于2kb,post傳送的數據量大,一般默認為不受限制。
訪問網絡要加入權限 <uses-permission android:name="android.permission.INTERNET" />
下面是get請求HttpGet時的示例代碼:
復制代碼 代碼如下:

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

post請求HttpPost的示例代碼:
復制代碼 代碼如下:

View Code
HttpClient httpClient=new DefaultHttpClient();
HttpPost post = new HttpPost(
"http://192.168.1.88:8888/foo/login.jsp");
// 如果傳遞參數個數比較多的話可以對傳遞的參數進行封裝
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("pass", pass));
try
{
// 設置請求參數
post.setEntity(new UrlEncodedFormEntity(
params, HTTP.UTF_8));
// 發送POST請求
HttpResponse response = httpClient
.execute(post);
// 如果服務器成功地返回響應
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方式,示例代碼:
復制代碼 代碼如下:

View Code
try
{
String urlName = url + "?" + params;
URL realUrl = new URL(urlName);
// 打開和URL之間的連接或者HttpUrlConnection
URLConnection conn =realUrl.openConnection();
// 設置通用的請求屬性
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();
// 獲取所有響應頭字段
Map<String, List<String>> map = conn.getHeaderFields();
// 遍歷所有的響應頭字段
for (String key : map.keySet())
{
System.out.println(key + "--->" + map.get(key));
}
// 定義BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null)
{
result += "/n" + line;
}
}
catch (Exception e)
{
System.out.println("發送GET請求出現異常!" + e);
e.printStackTrace();
}
// 使用finally塊來關閉輸入流

使用post的示例代碼:
復制代碼 代碼如下:

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

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

View Code
//服務器端
//創建一個ServerSocket,用于監聽客戶端Socket的連接請求
ServerSocket ss = new ServerSocket(30000);
//采用循環不斷接受來自客戶端的請求
while (true)
{
//每當接受到客戶端Socket的請求,服務器端也對應產生一個Socket
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
os.write("您好,您收到了服務器的消息!/n"
.getBytes("utf-8"));
//關閉輸出流,關閉Socket
os.close();
s.close();
}
//客戶端
Socket socket = new Socket("192.168.1.88" , 30000);
//將Socket對應的輸入流包裝成BufferedReader
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//進行普通IO操作
String line = br.readLine();
show.setText("來自服務器的數據:" + line);
br.close();
socket.close();

udp連接示例:
復制代碼 代碼如下:

View Code
服務器端:
try {
//創建一個DatagramSocket對象,并指定監聽的端口號
DatagramSocket socket = new DatagramSocket(4567);
byte data [] = new byte[1024];
//創建一個空的DatagramPacket對象
DatagramPacket packet = new DatagramPacket(data,data.length);
//使用receive方法接收客戶端所發送的數據
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 {
//首先創建一個DatagramSocket對象
DatagramSocket socket = new DatagramSocket(4567);
//創建一個InetAddree
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello";
byte data [] = str.getBytes();
//創建一個DatagramPacket對象,并指定要講這個數據包發送到網絡當中的哪個地址,以及端口號
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);
//調用socket對象的send方法,發送數據
socket.send(packet);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

以上,是我的總結,最近正在做一個類似網絡視頻客戶端的作品,如果大家有人做過這方面,歡迎您們提出建議和實現終端和服務器訪問的其他方法。謝謝!
與大家共勉?。?!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99视频精品| 亚洲激情中文字幕| 777国产偷窥盗摄精品视频| 欧美成人免费观看| 欧美最顶级丰满的aⅴ艳星| 国产成人精品一区二区| 韩国三级日本三级少妇99| 久久久国产一区| 欧美成人免费一级人片100| 久久综合免费视频| 国产在线视频91| 亚洲精品中文字幕av| 欧美亚洲国产日韩2020| 国产婷婷97碰碰久久人人蜜臀| 在线日韩欧美视频| 黑人极品videos精品欧美裸| 国产日韩在线亚洲字幕中文| 亚洲美女av黄| 精品久久久久久电影| 国产精品久久999| 久久精品视频播放| 欧美激情欧美激情在线五月| 1769国内精品视频在线播放| 久久久久久国产精品久久| 国产精品手机播放| 日韩av电影免费观看高清| 色爱精品视频一区| 中国人与牲禽动交精品| 亚洲精品国产精品国产自| 久久久视频精品| 午夜伦理精品一区| 亚洲福利视频网站| 亚洲精品电影网| 精品精品国产国产自在线| 这里只有精品视频在线| 国产一区二区成人| 精品视频9999| 欧美大片在线免费观看| 久久中文字幕在线| 国产亚洲欧洲高清一区| 久久久久久亚洲精品| 精品日韩美女的视频高清| 91精品国产电影| 欧美亚洲另类制服自拍| 国产成人精品在线观看| 欧美激情一区二区三区成人| 91av视频在线观看| 日韩电影中文字幕| 国产成人免费av电影| 欧美大片大片在线播放| 26uuu另类亚洲欧美日本一| 国产精品久久久久久久电影| 国产不卡av在线| 亚洲人成亚洲人成在线观看| 亚洲奶大毛多的老太婆| 久久精品视频免费播放| 精品无人区太爽高潮在线播放| 亚洲国产美女精品久久久久∴| 成人免费视频97| 欧美日韩一区二区免费在线观看| 久久久久久高潮国产精品视| 久久99精品国产99久久6尤物| 欧美激情视频网站| 68精品国产免费久久久久久婷婷| 久久久久久久国产精品| 亚洲成色777777女色窝| 久久频这里精品99香蕉| 久久久999国产| 欧美高清视频在线观看| 日韩精品在线电影| 热门国产精品亚洲第一区在线| 国产91成人在在线播放| 久久精品2019中文字幕| 国产在线精品一区免费香蕉| 欧美日韩激情美女| 69精品小视频| 国产精品视频成人| 中文字幕不卡在线视频极品| 国产成人精彩在线视频九色| 日韩美女av在线免费观看| 国产一区二区三区日韩欧美| 久久人人爽人人爽人人片av高请| 日韩精品在线电影| 欧美激情乱人伦一区| 国产亚洲一区精品| 国产精品久久久久aaaa九色| 日韩欧美中文字幕在线播放| 色综合久久久久久中文网| 米奇精品一区二区三区在线观看| 青青草精品毛片| 伊人成人开心激情综合网| 中文字幕亚洲综合久久筱田步美| 亚洲激情视频网站| 亚洲电影在线看| 亚洲天堂免费视频| 欧美专区第一页| 国内揄拍国内精品少妇国语| 国产香蕉精品视频一区二区三区| 伦伦影院午夜日韩欧美限制| 欧美激情视频一区二区三区不卡| 91香蕉亚洲精品| 亚洲已满18点击进入在线看片| 日韩欧美亚洲范冰冰与中字| 全亚洲最色的网站在线观看| 4p变态网欧美系列| 亚洲视频777| 欧洲s码亚洲m码精品一区| 懂色av一区二区三区| 中文字幕视频一区二区在线有码| 精品久久中文字幕| 国产精品吴梦梦| 亚洲精品短视频| 国产精品视频地址| 狠狠做深爱婷婷久久综合一区| 热久久这里只有精品| 91精品国产综合久久男男| 欧美视频中文字幕在线| 久久综合久久八八| 国产一区二区色| 日韩欧美国产成人| 欧美日韩国产精品一区| 久久久久久久久久久av| 性色av一区二区三区| 亚洲午夜av电影| 欧美一级电影免费在线观看| 午夜精品久久久久久久久久久久| 狠狠色香婷婷久久亚洲精品| www.久久撸.com| 高潮白浆女日韩av免费看| 日本欧美爱爱爱| 国产精品爱啪在线线免费观看| 日韩成人激情影院| 中文字幕在线看视频国产欧美| 九九视频这里只有精品| 欧美激情精品久久久久久蜜臀| 欧美多人爱爱视频网站| 欧美中文字幕视频在线观看| 亚洲欧美激情一区| 亚洲色图美腿丝袜| 亚洲欧洲日产国码av系列天堂| 日韩大陆毛片av| 欧美激情在线视频二区| 国产精品中文字幕在线观看| 日韩精品福利网站| 日韩精品一二三四区| 亚洲精品免费在线视频| 久久激情视频久久| 亚洲jizzjizz日本少妇| 久久在线观看视频| 国产一区二区三区在线| 成人免费看吃奶视频网站| 欧美wwwxxxx| 亚洲精品天天看| 久久亚洲国产成人| 日本一区二区三区在线播放| www.日本久久久久com.| 国产精品久久久久久久久影视| 欧美精品手机在线| 国产精品扒开腿爽爽爽视频| 亚洲精品福利免费在线观看| 北条麻妃一区二区三区中文字幕| 7m精品福利视频导航| 亚洲精品在线不卡| 日韩中文字幕不卡视频|