common中的User类:
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003747021-709716093.png)
序列化就是可以让一个对象在网络或者文件中传输;
例如:用户信息;
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003747705-1577703511.png)
-------------
-客户端连接服务器
//把用户名和密码传递给服务器
用户点击登录:
连接QQ,启动QQ
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003748393-1377570353.png)
//把User 信息传递给服务器-和服务器交互的类
QqClientUser
登录验证
Server就像一个数据库一样
QqClientUser是一个业务逻辑;
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003748656-1565960414.png)
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003749166-1587288561.png)
服务器类似于数据库;
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003749800-1535764345.png)
QqClientConServer.java是专门负责和服务器发生交互的
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003750397-1060838501.png)
发送的可能是一个对象:
public void SendInfoToServer
(object o)
//发送第一次请求
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003750771-1468281939.png)
//发送
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003751136-1508436099.png)
//
-----------------------
-Message.java
对
Message规定一些规则
mesType 1--->表明登录成功;
mesType 2--->表明登录失败;
mesType 3--->普通的消息包;
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003751575-1279532785.png)
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003752086-2080424787.png)
网络通信中有各种的消息;
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003752872-1496226766.png)
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003753444-1753887544.png)
//会返回一个boolean值交给
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003753768-2125391700.png)
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003754545-1947893090.png)
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003755579-2128345708.png)
登录界面的用户名、密码User的验证
登录QqClientLogin,登录过后创建了一个ClientUser
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003756099-1190650174.png)
它利用了一个ClientConServer的类,
把用户信息发出去了,验证,是否成功:
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003756700-1918595589.png)
是成功还是不成功?
------------------------------
-服务器接收到了,得返回一个信息:
服务器读取对象流User
对象转成User;
拿到User,
得去数据库去验证;
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003757737-2098995238.png)
-QqServerUser连接数据库
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003758228-407977693.png)
-com.qq.server.db
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003758483-1413675708.png)
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003758675-1123785072.png)
把m返回去;
oos.writeobject(m);
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003759482-905580594.png)
测试代码:
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003759908-2053742253.png)
服务器只监听一次,没有while循环
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003800163-1829977628.png)
发错误的信息,再次点的话服务器就没有监听;
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003800579-1955680710.png)
如果连接不成功,需要一直监听,
加上个while循环;错误,可以通过while循环一直监听;
![](https://img2018.cnblogs.com/blog/1167156/201812/1167156-20181201003801385-593271284.png)
while循环,关闭连接,服务器重新监听;
第一次出错了,利用while循环监听,
可以再给他一次机会,再重新监听一次;