欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-16 08:26:19
...

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

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

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

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

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

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

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

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

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

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

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

使用Eclipse自带抓包工具

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

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

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

栗子

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、链接在浏览器中试一下

运行程序,点击按钮,观察日志
【达内课程】网络通信之HTTP协议(1)
也可以查看Eclipse中信息
【达内课程】网络通信之HTTP协议(1)

链接可以增加参数,如

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

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

对栗子进行改造下,增加一个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);
    }
}
相关标签: http