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 ,