UDP局域网QQ聊天程序的设计说明书.docxVIP

  • 8
  • 0
  • 约1.59万字
  • 约 15页
  • 2021-03-24 发布于天津
  • 举报
3.2类库的设计 在本局域网聊天软件中,因为在后台服务器端的用户信息管理平台以及前台的客户 端的登录窗口、主界面窗口以及聊天窗口都需要用到 UDP协议。所以本程序中,将 UDP 协议封装成了一个控件,主要是为了便于客户端和服务器端的调用,并且将 UDP空件和 自定义类存储在了 Controls文件夹中。当需要使用到 UDP协议的时候,只需要在相应 的窗口中加入SockUDp空件,然后设置SockUD控件的相关的属性即可。下面对Controls 中的SockUDp空件和其他的类分别进行说明。 SockUDp空件 该控件主要是将UDP协议中的IP地址和端口号以及开启或者关闭的状态以控件的 形式进行设置,并自定义一个了 DataArrival事件,用于对主机的端口号进行监听,以 获取远程计算机发送过来的消息。 在自定义控件上制作了 System.Net.IPEndPoint 类的server属性,来获得对方IP 地址和端口号信息 UDPSocket控件中包含CloseSocket ()方法分别用于关闭UDP协议端口的监听功 能,并在监听关闭的同时关闭用于接收信息的子线程。 Listener ()方法用于实现主机端口号的监听功能,主要是将 IP地址和端口号以 网络端点进行存储,然后创建一个新的端口号,再设置接收缓冲区和发送缓冲区的大小。 此外,还创建了一个线程,主要是用于获取当前接收到的信息,就是将获取的远程信息 转换成二进制流。在线程打开时,将 GetUDPData()方法所接收的信息传递给线程的委 托。 GetUDPDataO方法是在获取远程消息时,将消息转发给 UDPSocket控件的 DataArrival事件,可以通过该事件将消息发送给远程客户端。 Send ()方法用于将主机获取的消息,通过 IP地址和端口号发送给远程客户端。 Dispose ()函数用以清理正在使用的资源 通过以上的方法,便制作完成了一个 SockUDP空件。 Publec_Class 类 该类用于记录服务器端和客户端的基本信息, 并通过自定义的方法MyHostIP()获 取服务器端的所有IP地址,通过自定义方法 Get_Windows()获取Windows目录。 ClassForms 类 该类将获取的的窗体在Inn erList列表中进行添加和移除操作,在列表中查找相应 的窗体。 ClassMsg 类 该类主要是用枚举型的元素指定消息发送的命令、消息类型、消息发送的状态等。 其中,发送的消息命令包括了用户登录、用户登录结束上线、用户列表、打开语音、关 闭语音、下线等命令;发送的消息类型包括了无类型、发送命令、发送消息、发送文件 等。此外,该类还用来记录发送方和接收方的发送编号、IP地址以及端口号等信息,还 记录了用户注册的用户名和密码等信息。 (6) ClassSerializers 类 SerializeB inary ()方法 该方法是在客户端发送信息时,将发送的对象序列化为二进制流,并返回序列化的 二进制流,因为Socket只能以二进制流的形式进行传输。 DeSerializeBi nary ()方法 该方法是在客户端接收信息时,将二进制流反序列化为对象,并返回反序列化后的 对象,这样,便于在指定的控件上显示接收的信息。 (7) ClassUserlnfo 类 该类用于记录当前用户的编号、IP地址、端口号、用户名称和用户状态。 (8) ClassUsers 类 该类主要是将服务器端所有注册的用户信息存储到 base类的InnerList列表中。 这样,当用户注册或登陆时,可以将该列表中的信息发给当前在线的所有用户,以改变 主窗体的显示情况。 ClassTextMsg 类 该类主要是用枚举型的元素指定发送文本的字体、颜色、内容等。 4.2.2客户端登陆模块技术分析 在UDP协议的监听事件中通过开启一个线程,来实现局域网信息的发送和接收。要 想创建一个子线程,需要实例化一个 Thread类型的对象。子线程创建完后,可以使用 线程的Start ()方法开启当前线程。当子线程使用完之后,可以使用 Thread对象的 Sleep( 0)方法将主线程睡眠,然后调用线程的 trd.Abort() 方法终止当前线程。 4.2.3客户端登陆模块实现过程 (1)新建一个 Windows窗体,命名为FormLogon.cs。该窗体主要实现客户端的登 陆功能。 (3) 在登陆窗体加载时,获取服务器IP和端口号,再根据该IP地址和端口号与 服务器建立通信,把用户的信息发送给服务器进行记录。 (4) 在自定义控件SocUD啲DataArrival 事件中,利用托管调用 DataArrival事 件,并在该控件的线程上,用指定的参数对其进行异步托管。 (5) 托管对DataA

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档