【达内课程】网络通信之HTTP协议(上)

栗子是基于以下文章中的栗子写的
https://blog.csdn.net/u010356768/article/details/81116760
https://blog.csdn.net/u010356768/article/details/81167139

网络通信之HTTP协议
HTTP协议是超文本传输控制协议
HTTP协议中定义了客户端与服务端的通信流程与数据交互格式

常见长连接案例:
IM(即时通讯)、大型游戏

常见短链接案例:
绝大多数APP都是短链接

使用原则:
能用短连接的就用短连接


使用Eclipse自带抓包工具

如何使用Android代码发送HTTP GET请求

栗子

xml中增加一个id为btn_connect按钮

MainActivity

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_connect;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setViews();
    }


    private void setViews() {
        btn_connect = findViewById(R.id.btn_connect);
        btn_connect.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_connect:
                new Thread(){
                    @Override
                    public void run() {
                        try {
                            findFlightsByGet();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }.start();
                break;
        }
    }

    //使用Get方式发送请求 获取航班数据
    private void findFlightsByGet() throws IOException {
        //URL
        URL url = new URL("http://192.168.3.25:8888/android_jsp/flight_index.jsp");
        //HttpURLConnection
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //getInputStream
        InputStream is = conn.getInputStream();
        //读取字符串
        StringBuilder respText = new StringBuilder();
        String line = null;
        BufferedReader bf = new BufferedReader(new InputStreamReader(is,"utf-8"));
        while((line = bf.readLine())!=null){
            respText.append(line);
        }
        //字符串读取完毕
        Log.d("info",""+respText);
    }
}

AndroidManifest.xml增加权限

 <uses-permission android:name="android.permission.INTERNET"/>

注意
1、需要打开8888端口的监听,步骤可参考这里
2、链接在浏览器中试一下

运行程序,点击按钮,观察日志
这里写图片描述
也可以查看Eclipse中信息
这里写图片描述

链接可以增加参数,如

http://192.168.3.25:8888/android_jsp/flight_index.jsp?date=2018-7-24

这里写图片描述

对栗子进行改造下,增加一个Edittext,根据输入的日期进行查询
MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    ......

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setViews();
    }


    private void setViews() {
        et_date = findViewById(R.id.et_date);
        ......
    }

    ......

    //使用Get方式发送请求 获取航班数据
    private void findFlightsByGet() throws IOException {
        String d = et_date.getText().toString();

        //URL
        URL url = new URL("http://192.168.3.25:8888/android_jsp/flight_index.jsp"+("".equals(d)?"":("?date="+d)));
        ......
        //字符串读取完毕
        Log.d("info",""+respText);
    }
}

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/81230642