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                     // 去掉返回结果中的“\r”字符,否则会在结果字符串后面显示一个小方格

24                     tvQueryResult.setText(result.replaceAll("\r", ""));

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                     // 去掉返回结果中的“\r”字符,否则会在结果字符串后面显示一个小方格

44                     tvQueryResult.setText(result.replaceAll("\r", ""));

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();

你可能感兴趣的:(网络编程)