简单的android和本地服务器通信,以及乱码问题的解决

由于最近帮助一个学弟做了一个小的系统,需要用到客户端和服务器来实现通信的效果。然后我这边也是第一次做这样东西,所以我就把这几天遇到的问题在这里做下总结,也可以方便后面的网友们看看。

我们在通讯过程中客户端可以通过post和get两种方式来与服务端进行通信。我在这边就介绍下post方式吧。

1、客户端

public static JSONObject sendState(JSONObject json, String url) {
    InputStreamReader isr = null;
    DataOutputStream dos = null;
    HttpURLConnection urlConn = null;
    BufferedReader bufferedReader = null;
    JSONObject jsonObject = null;
    try {
        URL url1 = new URL(url);
        urlConn = (HttpURLConnection) url1.openConnection();
        urlConn.setDoInput(true);//设置输入流采用字节流
        urlConn.setDoOutput(true);//设置输出流采用字节流
        urlConn.setRequestMethod("POST");//post方法
        urlConn.setUseCaches(false);//缓存
        urlConn.setReadTimeout(20000);
        urlConn.setConnectTimeout(20000);
        urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//设置meta参数
        urlConn.setRequestProperty("Charset", "utf-8");//缓存
        String data = json.toString();
        urlConn.connect();//连接服务器发送消息
        if(data!=null&&!"".equals(data)){
            dos = new DataOutputStream(urlConn.getOutputStream());
            dos.write((json.toString()).getBytes());//写数据
            dos.close();
            dos.flush();
        }


        if(urlConn.getResponseCode()==200){
            isr = new InputStreamReader(urlConn.getInputStream());
            bufferedReader = new BufferedReader(isr);
            String result = "";
            String readLine = null;
            while ((readLine = bufferedReader.readLine()) != null) {
                result += readLine;
            }
            jsonObject = new JSONObject(result);
            bufferedReader.close();
            isr.close();
        }
        urlConn.disconnect();//关闭连接
        return jsonObject;
    } catch (MalformedURLException e) {
        e.printStackTrace();
        return jsonObject;
    } catch (IOException e) {
        e.printStackTrace();
        return jsonObject;
    } catch (JSONException e) {
        e.printStackTrace();
        return jsonObject;
    }

我们可以将用来查询的Sql语句所需要的数据都存放到json中上传给服务器,例如登录功能,我们将用户名、密码写入json中。

2、服务端

public class Login extends HttpServlet{
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 解决中文乱码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                request.getInputStream(),"utf-8"));//这里很重要,中文乱码可以解决。
        StringBuilder sb = new StringBuilder();
        String line = null;
        String result = "";
        JSONObject jsonObject = null;
        while ((line = in.readLine()) != null) {
            sb.append(line);
        }
        result = sb.toString();
        jsonObject = JSONObject.fromObject(result);
        String username = jsonObject.getString("username");
        String password = jsonObject.getString("password");
        UserServiceImpl impl = new UserServiceImpl();
        boolean isExit = impl.queryUserForLogin(username, password);
        Map<String, String> params = new HashMap<String, String>();
        if(isExit) {
            params.put("result", "success");
        } else {
            params.put("result", "fail");
        }
        JSONObject jsonObjec = JSONObject.fromObject(params);
        out.write(jsonObjec.toString());
        out.flush();
        out.close();
    }
}

我们在拿到用户名密码的数据后调用sql查询,将结果返回给客户端即可实现登录的功能。

以前没写过以为很难,通过这次编写这个系统学到了很多东西。看来多弄弄新东西还是很不错的体验啊。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_41620230

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值