四层协议:
应用层
传输层
网络互联层
主机到网络层
ip协议 类似信封通过访问ip地址,确定唯一的一台主机,通过端口访问具体的程序。
tcp/udp :TCP面向连接的,连接时三次握手,断开时四次挥手,比较安全,效率低一些。
udp面向无连接的,类似邮局,只把信放入信封,不管有没有收到,效率高安全性差。
socket:java做tcp/ip开发的一套接口。
http协议基于tcp,http->tcp->ip->底层协议
http超文本传输协议
http1.0 每一次请求之后都会断开。
http1.1每次请求之后可以不必断开,效率高很多。
请求:get/post put head trace delete(一共7种方式)
get: 参数放url后面,url跟参数用?隔开,每一个参数用&隔开,浏览器对提交参数的长度有限制,不超2k
post:参数的组拼方式一样,每个参数之间用&隔开key=value,参数放在请求体里
用火狐查看只需这样:开发者-》Web控制台
Chrome 更多工具-》开发者工具 NetWork All Name 选中一个事件,然后便可以看到header等。
请求行: 请求地址,请求方法,请求用到的 http 协议。
请求头:
get:
Host:请求主机地址。
响应式开发,User-Agent:判断当前浏览器类型。
Accept:当前客户端可以接收的数据类型。
Accept-Language:当前浏览器支持的语言。
Accept-Encoding:服务端与客户端传递数据时,表示客户端可以接受的压缩数据类型。
Referer:提交的url。
Connection:连接状态。
post:多了两项
content-type:请求体类型,
content-length:上传的数据有多长
请求体:post才有,会对请求内容编码,把内容中汉字编码。
响应:
响应行:
200~299 请求成功
300~399 服务端收到请求,但需要客户端做进一步动作
400~499 请求错误,客户端的问题
500~599 服务端的错误
响应头:
Accept-Ranges:"bytes"数据返回类型的单位。
Content-Length:相应体长度。
Content-Type:响应的类型。
Date:当前的时间。
Etag:根据当前服务器端的内容,若是编码没发生改变,则直接调用缓存。
Last_Modify:最后更新时间。便于缓存。若是没有发生改变,则直接调用缓存。
Server:服务端的类型。
响应体:
网络传输数据都是通过流。
网页源码查看核心代码:
把按钮点击,然后加上这个事件监听即可。
public class MainActivity extends Activity {
private EditText et_text;
private Button bt;
private TextView tv_code;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
String str=(String) msg.obj;
tv_code.setText(str);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_text=(EditText) findViewById(R.id.et_url);
bt=(Button) findViewById(R.id.bt_getCode);
tv_code=(TextView) findViewById(R.id.tv_code);
bt.setOnClickListener(new MyListener());
et_text.setText("http://10.0.2.2:8080");
}
private class MyListener implements OnClickListener
{
@Override
public void onClick(View v)
{
new Thread(){
@Override
public void run() {
String path=et_text.getText().toString().trim();
try {
URL url=new URL(path);
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");//设置请求方式,方法要大写,默认采用GET方法
connection.setConnectTimeout(30000);
connection.setReadTimeout(30000);
int code=connection.getResponseCode();
if(code==200){
InputStream inputStream=connection.getInputStream();
String result=Utils.getStringFromStream(inputStream);
Message message=new Message();
message.obj=result;
handler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
}
可以参考: 点击打开链接 完整些。