局域网聊天系统详细设计

本项目用到的主要技术有:

WCFsocket网络编程(UDP通信通信、TCP通信)、数据库技术、数据库通用访问类、三层架构 ,其中三层架构的UI层在客户端,BLLDAL层在服务端,WCF技术包括两个契约,即服务契约、数据契约,服务契约有:

1.(登陆)List<UserMsg> UserLogin(string UserName, string UserPwd, string LoginIP, string LoginPort, out int LoginState, out List<UserMsg> WhoAddUserNameAsFriend, out List<string> GroupNames, out UserMsg LoginUserMsg);

2.(下线)

void UserOffLine(下线者的UserName)

3.(注册)int UserRegisterUserName,UserPwd,PhoneNum,Email,Address

4.(添加好友)UserMsg QueryFriendUserName);

Void AddFriend(UserName ,GoodFriendName,GroupName);

5.(修改信息) int UserUpdate(UserName,UserPwd,PhoneNum,Email,Address)

6.(同意添加该好友)UserMsg AggreeAddFriend(UserNameGoodFriendName, GroupName);//GoodFriend表中Flag字段改为True,返回GoodFriendName的信息;

(不同意添加该好友)Void DisaggreeAddFriend(UserNameGoodFriendName);//

7.GoodFriend表中与UserNameGoodFriendName相同的一行删除;

登陆(上线)

当客户端登陆时调用服务契约的List<UserMsg> UserLogin(string UserName, string UserPwd, string LoginIP, string LoginPort, out int LoginState, out List<UserMsg> WhoAddUserNameAsFriend, out List<string> GroupNames, out UserMsg LoginUserMsg);

方法,返回给UI值(0表示登陆成功,1表示账号不存在,2表示密码错误);

登陆成功后List中存放的是该上线用户的所有好友信息,否则为NULL,其中UserMsg中的字段有UserName, GroupName,PhoneNum,Email,Address,UserIP,IPort, State,其中State1时表示在线,0则是不在线

UDP方式向该用户的各个好友发送(该好友上线(void SendOnLine(上线者的UserName , PhoneNum, Email, Address ,UserIP,IPort))的)消息

在客户端登陆成功后,服务端需要给该登陆者的所有在线好友发送消息:该登陆者上线了,此时服务端用的是UDP通信方式告诉该登陆者的所有好友,所以客户端需要创建一个UDP监听线程,监听从服务端发来的消息,之所以要用UDP是因为,在循环发送给该登陆者的所有好友的消息过程中如果用TCP连接,则发送一个需要三次握手成功之后才能发送消息,如果有一个握手不成功则剩下的全部发送失败,风险比较大,所以应该用UDP通信方式,给客户端发送

下线:

  当客户端下线(UserOffLine(下线者的UserName)(服务契约))时或者异常关闭tcp连接时,服务端修改该用户的状态,用套接字方式向该用户的各个好友发送(该用户下线(SendOffLine(下线者的UserName))的)消息。

注册:

UI调用BLLUserRegisterUserName,UserPwd,PhoneNum,Email,Address)方法返回给UI值(0表示成功,1表示不成功);

添加好友:

UserMsg QueryFriendUserName);UserMsgNULL表示未找到,否则找到!

Void AddFriend(UserName, GoodFriendName,GroupName);

    UserMsg AggreeAddFriend(UserNameGoodFriendNameGroupName);//GoodFriend表中Flag字段改为True,返回GoodFriendName的信息;

    Void DisaggreeAddFriend(UserNameGoodFriendName);//把GoodFriend表中与UserNameGoodFriendName相同的一行删除;

客户端向服务端发送添加好友请求,服务端把该好友的信息返回给客户端,客户端确认添加(确认信息包括(添加到的分组名))后向服务端发送确认添加请求,服务端操作数据库,然后修改GoodFriend表(添加一行,这行的Flag列为false),(描述:如果对方同意则修改该行的Flag列为True,同时添加对方为好友,否则删除该行)

修改信息:

UI调用BLLUserUpdate(UserName,UserPwd,PhoneNum,Email,Address)方法,修改数据库后返回给UI信息(0表示修改成功,1表示修改不成功)

同意添加该好友:

UserMsg AggreeAddFriend(UserNameGoodFriendName, GroupName);//GoodFriend表中Flag字段改为True,返回GoodFriendName的信息;

不同意添加该好友:

Void DisaggreeAddFriend(UserNameGoodFriendName);//GoodFriend表中与UserNameGoodFriendName相同的一行删除;

数据契约中包括的字段主要有:

int flag; 用于UDP通讯中,序列化与反序列化后标示该数据对象的表明的意思,0表示该用户上线,1表示当我在线的时候该数据对象想要添加我为好友,2表示该对象下线,3表示我添加的好友同意了我的请求。

        string userName;

       

        string groupName;

       

        string userPwd;

        

        string phoneNum;

       

        string email;

      

        string address;

        

        string userIP;

       

        string iPort;

      

        int state;     

你可能感兴趣的:(.net技术)