12、网络编程

HttpGet和HttpPost的使用步骤 

1. 创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。

2. 使用DefaultHttpClient.execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。

3. 通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。

如果使用HttpPost方法提交HTTP POST请求,还需要使用HttpPost类的 setEntity方法设置请求参数。 

 1     @Override
 2     public void onClick(View view) {
 3         // 读者需要将本例中的IP换成自己机器的IP
 4         String url = "http://192.168.17.105:8080/querybooks/QueryServlet";
 5         TextView tvQueryResult = (TextView) findViewById(R.id.tvQueryResult);
 6 
 7         HttpResponse httpResponse = null;
 8         try {
 9             switch (view.getId()) {
10             // 提交HTTP GET请求
11             case R.id.btnGetQuery:
12                 // 向url添加请求参数
13                 url += "?bookname=" + etBookName.getText().toString();
14                 // 第1步:创建HttpGet对象
15                 HttpGet httpGet = new HttpGet(url);
16                 // 第2步:使用execute方法发送HTTP GET请求,并返回HttpResponse对象
17                 httpResponse = new DefaultHttpClient().execute(httpGet);
18                 // 判断请求响应状态码,状态码为200表示服务端成功响应了客户端的请求
19                 if (httpResponse.getStatusLine().getStatusCode() == 200) {
20                     // 第3步:使用getEntity方法获得返回结果
21                     String result = EntityUtils.toString(httpResponse
22                             .getEntity());
23                     // 去掉返回结果中的“
”字符,否则会在结果字符串后面显示一个小方格
24                     tvQueryResult.setText(result.replaceAll("
", ""));
25                 }
26                 break;
27             // 提交HTTP POST请求
28             case R.id.btnPostQuery:
29                 // 第1步:创建HttpPost对象
30                 HttpPost httpPost = new HttpPost(url);
31                 // 设置HTTP POST请求参数必须用NameValuePair对象
32                 List<NameValuePair> params = new ArrayList<NameValuePair>();
33                 params.add(new BasicNameValuePair("bookname", etBookName
34                         .getText().toString()));
35                 // 设置HTTP POST请求参数
36                 httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
37                 // 第2步:使用execute方法发送HTTP POST请求,并返回HttpResponse对象
38                 httpResponse = new DefaultHttpClient().execute(httpPost);
39                 if (httpResponse.getStatusLine().getStatusCode() == 200) {
40                     // 第3步:使用getEntity方法获得返回结果
41                     String result = EntityUtils.toString(httpResponse
42                             .getEntity());
43                     // 去掉返回结果中的“
”字符,否则会在结果字符串后面显示一个小方格
44                     tvQueryResult.setText(result.replaceAll("
", ""));
45                 }
46                 break;
47             }
48         } catch (Exception e) {
49             tvQueryResult.setText(e.getMessage());
50         }
51     }
1 <uses-permission android:name="android.permission.INTERNET" />

HttpURLConnection的使用步骤 

1. 用Url.openConnection方法获取HttpURLConnection对象。
2. 设置请求方法,如httpURLConnection.setRequestMethod("POST");

3. 设置输入输出及其它权限。
4. 设置HTTP请求头。
5. 输入和输出数据。
6. 关闭输入输出流。 

Socket发送数据 

Socket socket = new Socket("192.168.17.105", 80);

OutputStream os = socket.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os);

BufferedWriter bw = new BufferedWriter(osw);

bw.write("hello world");

bw.flush();

bw.close(); 

Socket接收数据 

Socket socket = new Socket("192.168.17.105", 80);

InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);
String s = "";
while((s = br.readLine()) != null)

       System.out.println(s);

br.close(); 

ServerSocket监听客户端请求 

ServerSocket serverSocket = new ServerSocket(1234); // 绑定端口 
while(true)  // 处理其他任务的代码
{

        Socket socket = serverSocket.accept(); // 等待接收客户端请求

        // 处理其他任务的代码
        new ThreadClass(socket).start();

原文地址:https://www.cnblogs.com/androidsj/p/3929373.html