Android 开发即时聊天工具 YQ :(三) 实现登陆功能
前面socket基本通信完了,登陆界面也已经完成,下面就是重点了,实现登陆功能
服务器和客户端的代码当然不肯能用那个控制台的那个了,所以全部得重写,不过原理都一样,代码也差不多,都有注释,一看就明白。
先是登陆的Activity:
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
//---} 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来发送到服务器。
客户端:
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服务器无响应,则连接服务器超时。
最后在看服务器端:
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());User u=(User) ois.readObject();YQMessage m=new YQMessage();ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());if(u.getOperation().equals("login")){ //登录int account=u.getAccount();boolean b=new UserDao().login(account, u.getPassword());//连接数据库验证用户if(b){System.out.println("["+account+"] 上线了!");m.setType(YQMessageType.SUCCESS);//返回一个成功登陆的信息包oos.writeObject(m);//单开一个线程,让该线程与该客户端保持连接//---}else{m.setType(YQMessageType.FAIL);oos.writeObject(m);}}else if(u.getOperation().equals("register")){//注册}}} catch (Exception e) {e.printStackTrace();} }}
最后测试一下:
源码已经上传至我的资源,谢谢大家支持!欢迎一起学习交流!
转载请注明出处:http://blog.csdn.net/mimitracely
Android 开发即时聊天工具 YQ :(三) 实现登陆功能相关推荐
- Android 开发即时聊天工具 YQ :(四) 获取好友列表
在Android 开发即时聊天工具 YQ :(三) 实现登陆功能中已经实现了登陆功能,离能聊天又近了一步了 :) 在实现聊天之前还有一个重要的东西,?没错,就是好友列表,没的好友你和谁聊呀,是吧, 嘿 ...
- Android 开发即时聊天工具 YQ :(六) 最近会话列表
实现的效果如图: RecentActivity: public class RecentActivity extends Activity{ListView listView;List<Rece ...
- android 即时聊天工具 yq,Android 开发即时聊天工具 YQ :(四) 获取好友列表
实现聊天之前还有一个重要的东西,?没错,就是好友列表,没的好友你和谁聊呀,是吧, 嘿嘿,一切从简,早点实现基本的聊天目标的说,所以代码很懒(or 烂?),为什么呢?看完就知道了, 在服务器端当登陆成功 ...
- Android 开发即时聊天工具 YQ :(五) 发送消息
服务器端转发消息功能上节已经实现,只需将消息转发给消息包中的接收人即可, if(m.getType().equals(YQMessageType.COM_MES)){//如果是普通消息包 //取得接收 ...
- ios开发xmpp仿微信即时聊天工具
最近在做一个项目,需要一个即时聊天工具,先打算有第三方环信(http://www.easemob.com),但是最终老板不允许,要自己开发用自己的服务器,哎!如果有需要的可以去看看这个环信,真的不错. ...
- 基于Nodejs开发的web即时聊天工具
由于公司需要开发web即时聊天的功能,开始时我们主要的实施方法是用jquery的ajax定时(10秒)轮询向服务器请求,由于是轮询请求,对 服务器的压力比较大.我们网站上线的时间不长,访问量不是很大, ...
- 局域网即时聊天工具都有哪些?
在互联网普及的今天,使用即时聊天工具沟通交流在人们的日常生活和工作当中已经十分普及.但由于企业内部敏感信息通过互联网泄露的现象频发,不少企业出于安全性考虑只能转用局域网环境办公,在转用局域网环境办公后 ...
- android简单即时聊天sdk
android简单即时聊天sdk 切换用户登录的实现 联系人列表的实现 聊天页的实现 消息缓存与排序 消息接收和分发--数据库队列和投递队列 有序列表的维护 切换用户登录的实现 由于不同的登录用户需要 ...
- 跨跃平台交流无极限——linux下如何使用即时聊天工具,跨跃平台 交流无极限——Linux下如何使用即时聊天工具(一)...
I技应 术用与 跨跃平台交流无极限 维普资讯 http://doc.xuehai.net o n I s o f i e n t@ c n i i c o m t . L n x下如何使用即时聊天工具 ...
最新文章
- Oracle EXP-00091解决方法
- linux c setuid函数解析
- Raspberry Pi 4B 颜色检测
- WINCE屏蔽NK的串口输出信息
- POJ 2398 Toy Storage
- 通过日志恢复oracle序列,(存档日志包含序列84,要求序列36)怎么恢复啊?
- 调优哪家强——tensorflow命令行参数
- 国家邮政局:对刷单、贩卖快递盲盒等进行清理整顿
- stata基本操作(二)
- oracle 修改字段类型方法
- JAVA集合Collection与泛型<T>→List、ArrayList、LinkedList、→Set、HashSet、hashCode()→Map、HashMap、→Properties
- zw版_zw中文增强版Halcon官方Delphi例程
- javascript技巧大全
- Java基本数据类型及对应包装类
- max3232ese_【MAX3232ESE+ PDF数据手册】_中文资料_引脚图及功能_(美信 Maxim Integrated)-采芯网...
- 个人六年的成长与工作经验分享
- 【机器学习】泛化误差上界
- easyExcel 复杂表头 动态表头
- 你知道数据在内存中是如何存储的嘛?
- 宇视摄像机密码忘记找回方式(详细找回步骤)
热门文章
- SOLIDWORKS属性标签编制程序
- 【Linux系统中的】磁盘管理
- c语言将英文逗号转成中文逗号,处理csv文件,英文逗号替换成中文逗号之后就乱码...
- 素描对学计算机的意义,学素描有什么用?为什么学素描?
- 云计算专业防火墙NAT实验
- 商城分销商子等级设置介绍
- Vue组件中data的使用方式
- Learning FRAME Models Using CNN Filters for Knowledge Visualization
- 魔众客服系统 v1.3.0 后台界面升级,事件驱动增强
- 教你用canvas画n角星星