1.客户端连接服务器实现内部原理
用户在浏览器输入网址,通过http协议发出去,网址经过DNS域名解析,解析成指定的ip地址,并在80端口上监听用户的请求。服务器监听到请求之后,会以三种方式返回给客户端:HTML、XML、JSON。
2.GET方式和POST方式的差别
GET是从服务器上获取数据,POST是向服务器传送数据。
在客户端,GET方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放在HTML HEADER内提交。
get/post使用http的标准协议,用于编码和传送变量名/变量值对参数
3.HTTP返回请求数据的三种方式:
1)以HTML代码内容返回。
2)以XML字符串的形式返回,在以后的android开发中这种形式返回数据比较多。
3)以JSON对象形式返回,在网络流量上考虑JSON要比XML方式要好一些,便于解析。
在Android当中,一般使用xml和Json数据解析。
4.HttpURLConnection
在Android中,针对HTTP进行网络通信的方法主要有两种,一种是使用HttpURLConnection实现,另一种是使用HttpClient实现
在Android 6.0 中彻底的将Apache的HttpClient给移除掉了,使用HttpURLConnection
用户在浏览器输入网址,通过http协议发出去,网址经过DNS域名解析,解析成指定的ip地址,并在80端口上监听用户的请求。服务器监听到请求之后,会以三种方式返回给客户端:HTML、XML、JSON。
2.GET方式和POST方式的差别
GET是从服务器上获取数据,POST是向服务器传送数据。
在客户端,GET方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放在HTML HEADER内提交。
get/post使用http的标准协议,用于编码和传送变量名/变量值对参数
3.HTTP返回请求数据的三种方式:
1)以HTML代码内容返回。
2)以XML字符串的形式返回,在以后的android开发中这种形式返回数据比较多。
3)以JSON对象形式返回,在网络流量上考虑JSON要比XML方式要好一些,便于解析。
在Android当中,一般使用xml和Json数据解析。
4.HttpURLConnection
在Android中,针对HTTP进行网络通信的方法主要有两种,一种是使用HttpURLConnection实现,另一种是使用HttpClient实现
在Android 6.0 中彻底的将Apache的HttpClient给移除掉了,使用HttpURLConnection
public class MainActivity extends AppCompatActivity {
private Button btGet;
private Button btClean;
private Button btImage;
private TextView tv;
private ImageView iv;
StringBuilder builder;
String urlString = "https://www.baidu.com/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btGet = (Button)findViewById(R.id.btGet);
btClean = (Button)findViewById(R.id.btClean);
btImage = (Button)findViewById(R.id.btImage);
iv = (ImageView)findViewById(R.id.imageView);
tv = (TextView)findViewById(R.id.tvContent);
builder = new StringBuilder();
btGet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
try{
//1)创建URL对象
URL url = new URL(urlString);
//2)打开网络连接
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
//3)设置请求方式和超时时间
//Android默认采用的是GET请求
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
//4)获取请求返回的输入流
InputStream inputStream = connection.getInputStream();
//5)读取输入流里的数据
byte[] buffer = new byte[1024];
int len = 0;
while((len = inputStream.read(buffer))!=-1){
builder.append(new String(buffer, 0, len));
}
//6)关闭连接
connection.disconnect();
}catch (MalformedURLException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(builder.toString());
}
});
}
}).start();
}
});
btClean.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tv.setText("");
}
});
//图片下载
btImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
try{
//创建URL对象
URL url = new URL("http://192.168.122.1:8080/18.png");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
//获取输入流
InputStream is = connection.getInputStream();
//从输入流中解析图片
final Bitmap bitmap = BitmapFactory.decodeStream(is);
runOnUiThread(new Runnable() {
@Override
public void run() {
iv.setImageBitmap(bitmap);
}
});
}catch (MalformedURLException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
}).start();
}
});
}
}