Android 即时通信01

想要快速实现即时通信,就是说借助别人的SDK实现IM,有详细的API手册,服务端不用自己做,当然快,具体可以看一下教程:

借助融云SDK:http://edu.csdn.net/course/detail/1763

借助百度云SDK:http://blog.csdn.net/way_ping_li/article/details/9056635

                                http://blog.csdn.net/lmj623565791/article/details/38799363

(其实这些IM框架还是挺不错的,可以借助参考其UI)

但是这样有一个弊端,会被别人约束,假如有一天,你的实时通信APP已经积累了不少用户,别人的web API 不再给你免费,这时你只能乖乖掏钱。(而且有些敏感数据不想让别人知道)

而且,对于前端开发人员(Android APP开发)而言,肯定不能满足于Android APP,肯定想追求更高的目标--后台开发(服务端开发)。

因此,学会服务端开发势在必行。


下面简单引用别人的代码,实现android客户端和php+mysql+apache服务端的简单交互。

实现原理就是android客户端发送请求,传给服务器登入的用户名密码,服务器收到这些,连接到数据库查询,如果用户名和密码匹配正确,就输出字符串返回给客户端。

服务器端:
先在mysql里面建一个testlogin的数据库,里面有一个users表,记录了id,用户名和密码。

在php的虚拟目录下新建个php项目,创建conn.php和login.php文件。刚学点php写的不好。
conn.php是连接mysql数据库的。代码如下:

  1. conn.php代码:
  2. <?php
  3. $dbhost = "localhost:3306";
  4. $dbuser = "root"; //我的用户名
  5. $dbpass = ""; //我的密码
  6. $dbname = "testlogin"; //我的mysql库名
  7. $cn = mysql_connect($dbhost,$dbuser,$dbpass) or die("connect error");
  8. @mysql_select_db($dbname)or die("db error");
  9. mysql_query("set names 'UTF-8'");
  10. ?>

  11. login.php代码:
  12. <?php
  13. include ("conn.php");//连接数据库
  14. $username=str_replace(" ","",$_POST['name']);//接收客户端发来的username;
  15. $sql="select * from users where name='$username'";
  16. $query=mysql_query($sql);
  17. $rs = mysql_fetch_array($query);
  18. if(is_array($rs)){
  19. if($_POST['pwd']==$rs['password']){
  20. echo "login succeed";
  21. }else{
  22. echo "error";
  23. }
  24. }
  25. ?>
复制代码

php代码写的很烂,服务器算是架设完了。。

android客户端:
布局随意写一下就这样吧:

下面是主要的代码:

  1. class LoginHandler implements Runnable {
  2. @Override
  3. public void run() {
  4. // 界面的两个EditTest,用于手动输入用户名和密码
  5. userName = user_name.getText().toString().trim();
  6. password = pass_word.getText().toString().trim();
  7. //连接到服务器的地址,我监听的是8080端口
  8. String connectURL="http://192.168.1.100:8080/text0/com.light.text/login.php/";
  9. //填入用户名密码和连接地址
  10. boolean isLoginSucceed = gotoLogin(userName, password,connectURL);
  11. //判断返回值是否为true,若是的话就跳到主页。
  12. if(isLoginSucceed){
  13. Intent intent = new Intent();
  14. intent.setClass(getApplicationContext(), HomeActivity.class);
  15. startActivity(intent);
  16. proDialog.dismiss();
  17. }else{
  18. proDialog.dismiss();
  19. // Toast.makeText(ClientActivity.this, "登入错误", Toast.LENGTH_LONG).show();
  20. System.out.println("登入错误");
  21. }
  22. }
  23. }//登入的方法,传入用户 密码 和连接地址
  24. private boolean gotoLogin(String userName, String password,String connectUrl) {
  25. String result = null; //用来取得返回的String;
  26. boolean isLoginSucceed = false;
  27. //test
  28. System.out.println("username:"+userName);
  29. System.out.println("password:"+password);
  30. //发送post请求
  31. HttpPost httpRequest = new HttpPost(connectUrl);
  32. //Post运作传送变数必须用NameValuePair[]阵列储存
  33. List params = new ArrayList();
  34. params.add(new BasicNameValuePair("name",userName));
  35. params.add(new BasicNameValuePair("pwd",password));
  36. try{
  37. //发出HTTP请求
  38. httpRequest.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
  39. //执行POST命令并取得HTTP response   长连接
  40. HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);
  41. //若状态码为200则请求成功,取到返回数据
  42. if(httpResponse.getStatusLine().getStatusCode()==200){
  43. //取出字符串
  44. result=EntityUtils.toString(httpResponse.getEntity());
  45. ystem.out.println("result= "+result);
  46. }
  47. }catch(Exception e){
  48. e.printStackTrace();
  49. }
  50. //判断返回的数据是否为php中成功登入是输出的
  51. if(result.equals("login succeed")){
  52. isLoginSucceed = true;
  53. }
  54. return isLoginSucceed;
  55. }
复制代码

登入成功后会跳到APP的主页,这时,APP主页再发送httpconnection短连接请求获取服务端的内容即可。

这个是客户端获取服务端的信息的简单思想,那多个客户端之间的即时通信的代码怎样的,现在我也没接触过。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值