想要快速实现即时通信,就是说借助别人的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数据库的。代码如下:
- conn.php代码:
- <?php
- $dbhost = "localhost:3306";
- $dbuser = "root"; //我的用户名
- $dbpass = ""; //我的密码
- $dbname = "testlogin"; //我的mysql库名
- $cn = mysql_connect($dbhost,$dbuser,$dbpass) or die("connect error");
- @mysql_select_db($dbname)or die("db error");
- mysql_query("set names 'UTF-8'");
- ?>
-
- login.php代码:
- <?php
- include ("conn.php");//连接数据库
- $username=str_replace(" ","",$_POST['name']);//接收客户端发来的username;
- $sql="select * from users where name='$username'";
- $query=mysql_query($sql);
- $rs = mysql_fetch_array($query);
- if(is_array($rs)){
- if($_POST['pwd']==$rs['password']){
- echo "login succeed";
- }else{
- echo "error";
- }
- }
- ?>
复制代码
php代码写的很烂,服务器算是架设完了。。
android客户端:
布局随意写一下就这样吧:
下面是主要的代码:
- class LoginHandler implements Runnable {
- @Override
- public void run() {
- // 界面的两个EditTest,用于手动输入用户名和密码
- userName = user_name.getText().toString().trim();
- password = pass_word.getText().toString().trim();
- //连接到服务器的地址,我监听的是8080端口
- String connectURL="http://192.168.1.100:8080/text0/com.light.text/login.php/";
- //填入用户名密码和连接地址
- boolean isLoginSucceed = gotoLogin(userName, password,connectURL);
- //判断返回值是否为true,若是的话就跳到主页。
- if(isLoginSucceed){
- Intent intent = new Intent();
- intent.setClass(getApplicationContext(), HomeActivity.class);
- startActivity(intent);
- proDialog.dismiss();
- }else{
- proDialog.dismiss();
- // Toast.makeText(ClientActivity.this, "登入错误", Toast.LENGTH_LONG).show();
- System.out.println("登入错误");
- }
- }
- }//登入的方法,传入用户 密码 和连接地址
- private boolean gotoLogin(String userName, String password,String connectUrl) {
- String result = null; //用来取得返回的String;
- boolean isLoginSucceed = false;
- //test
- System.out.println("username:"+userName);
- System.out.println("password:"+password);
- //发送post请求
- HttpPost httpRequest = new HttpPost(connectUrl);
- //Post运作传送变数必须用NameValuePair[]阵列储存
- List params = new ArrayList();
- params.add(new BasicNameValuePair("name",userName));
- params.add(new BasicNameValuePair("pwd",password));
- try{
- //发出HTTP请求
- httpRequest.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
- //执行POST命令并取得HTTP response 长连接
- HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);
- //若状态码为200则请求成功,取到返回数据
- if(httpResponse.getStatusLine().getStatusCode()==200){
- //取出字符串
- result=EntityUtils.toString(httpResponse.getEntity());
- ystem.out.println("result= "+result);
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- //判断返回的数据是否为php中成功登入是输出的
- if(result.equals("login succeed")){
- isLoginSucceed = true;
- }
- return isLoginSucceed;
- }
复制代码
登入成功后会跳到APP的主页,这时,APP主页再发送httpconnection短连接请求获取服务端的内容即可。
这个是客户端获取服务端的信息的简单思想,那多个客户端之间的即时通信的代码怎样的,现在我也没接触过。