当前位置:操作系统 > 安卓/Android >>

Android 开发即时聊天工具 YQ :(三) 实现登陆功能

前面socket基本通信完了,登陆界面也已经完成,下面就是重点了,实现登陆功能

服务器和客户端的代码当然不肯能用那个控制台的那个了,所以全部得重写,不过原理都一样,代码也差不多,都有注释,一看就明白。

先是登陆的Activity:

[java] 
public class LoginActivity extends Activity { 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_login); 
        Button btnLogin=(Button) findViewById(R.id.btn_login); 
        btnLogin.setOnClickListener(new OnClickListener(){ 
            public void onClick(View arg0) { 
                int account=Integer.parseInt(((EditText) findViewById(R.id.et_account)).getText().toString()); 
                String password=((EditText) findViewById(R.id.et_password)).getText().toString(); 
                login(account, password); 
            } 
        });  
    } 
     
    void login(int a, String p){ 
        User user=new User(); 
        user.setAccount(a); 
        user.setPassword(p); 
        user.setOperation("login"); 
        boolean b=new YQConServer().sendLoginInfo(user); 
        //登陆成功 
        if(b){ 
            try { 
                //发送一个要求返回在线好友的请求的Message 
<span style="white-space:pre">              </span>//--- 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            //转到主界面, 
            Intent i=new Intent(this, MainActivity.class); 
            startActivity(i); 
        }else { 
            Toast.makeText(this, "登陆失败!不告诉你为什么,", Toast.LENGTH_SHORT).show(); 
        } 
    } 

将登陆的信息封装到user中,user的operation用来判断该user包的类型,交由YQClient来发送到服务器。

客户端:

[java]
public class YQClient{ 
    public Socket s; 
     
    public boolean sendLoginInfo(Object obj){ 
        boolean b=false; 
        try { 
            s=new Socket(); 
            try{ 
                s.connect(new InetSocketAddress("10.0.2.2",5469),2000); 
            }catch(SocketTimeoutException e){ 
                //连接服务器超时 
                return false; 
            } 
            ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); 
            oos.writeObject(obj); 
            ObjectInputStream ois=new ObjectInputStream(s.getInputStream()); 
            YQMessage ms=(YQMessage)ois.readObject(); 
            if(ms.getType().equals(YQMessageType.SUCCESS)){ 
                //创建一个该账号和服务器保持连接的线程 
                //--- 
                b=true; 
            }else if(ms.getType().equals(YQMessageType.FAIL)){ 
                b=false; 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } catch (ClassNotFoundException e) { 
            e.printStackTrace(); 
        } 
        return b; 
    } 

在登陆成功后,将会新开一个线程和服务器保持连接,该线程将用来通信,

要捕获SocketTimeoutException异常,否则连接 不到服务器,app会无响应,这里设置2s服务器无响应,则连接服务器超时。

 

最后在看服务器端:

[java]
public class YQServer { 
    public YQServer(){ 
        ServerSocket ss = null; 
        try { 
            ss=new ServerSocket(5469); 
            System.out.println("服务器已启动,正在监听5469端口..."); 
            while(true){ 
                Socket s=ss.accept(); 
                //接受客户端发来的信息 
                ObjectInputStream ois=new ObjectInputStream(s.getInputStream()); 
         &

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,