登陆
来源:互联网 发布:js中复选框的用法 编辑:程序博客网 时间:2024/04/28 11:35
服务器和客户端的代码当然不肯能用那个控制台的那个了,所以全部得重写,不过原理都一样,代码也差不多,都有注释,一看就明白。
先是登陆的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
- <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来发送到服务器。
客户端:
- 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 0 0
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 第一次登陆!!
- 第一次登陆
- 首次登陆
- 第一次登陆
- 初次登陆
- 第一次登陆
- 单点登陆
- 非版本化数据进行历史归档提示:Failed to enable archiving. Invalid column data type
- sql链接查询
- QPushButton显示“&”
- 惠州做开眼角对视力有没有影响?
- Java中的反射机制(二) 一个利用反射进行对象拷贝的例子
- 登陆
- auto_ptr使用总结
- oracle insert 笔记
- C#下登陆验证代码
- linux几个命令特殊用法
- Struts2的声明式异常处理
- Java 动态的创建注入代码,注入方法给类或者接口并通过反射调用
- 写好Hive 程序的五个提示
- centos 7忘记了root密码,如何改密码?