![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
小项目
文章平均质量分 76
wudaijun
新博客地址:wudaijun.com,QQ:812915118,欢迎交流。
展开
-
多线程非阻塞模式实例
多线程非阻塞模式到现在算是告一段落吧 虽然还有一些小的bug需要修正 总结一下 准备向后面进发 实现功能: 本程序主要实现远程计算的功能 通过非阻塞套接字和多线程的结合 让通信变得高效 服务器通过维护一个客户端链表来实现对多个客户响应 客户端自身验证表达式的正确性 当输入Byebye时 服务器回复OK 此时客户端断开连接退出 主要模块和线程管原创 2012-11-01 10:30:38 · 5837 阅读 · 1 评论 -
局域网聊天系统__4.服务器调试篇
这里主要遇到两个错误,都是粗心吧1. BOOL CServerDlg::VerifyUserAndUpdateUserList(CUserInfo& userInfo, CClientSocket *pClient) { POSITION pos = NULL; BOOL bNewUser = TRUE; for (po原创 2012-12-20 22:22:23 · 1062 阅读 · 0 评论 -
局域网聊天系统__1.需求分析以及模型选择
一。需求分析 该局域网简易聊天系统主要分服务器和客户端两个部分。客户端交于用户进行聊天,服务器用户管理所有用户的信息。 客户端功能: 1.和其他在线用户进行正常聊天 2.更新用户状态:当有用户上线或下线时,及时更新该用户状态 3.更新用户列表:当其他用户新上线获得被服务器删除时,及时更新用户列表原创 2012-12-20 21:56:41 · 4135 阅读 · 0 评论 -
局域网聊天系统__7.客户端调试与总结
调试遇到的问题不多,主要还是涉及到的一些指针问题,最主要的就是在构造函数中对指针成员的初始化问题,如果提供了自定义的构造函数,就容易忘记默认构造函数的初始化,以为默认构造函数自己不去掉用就不会有效,给调试带来了一些麻烦。 客户端整体来说不难,只要理清楚了哪些类负责完成什么任务,需要维护一些什么数据,就好办了。 这里的主对话框类主要负责维护界面,和服务器交互,以及在必要条件下原创 2012-12-20 22:34:36 · 1159 阅读 · 0 评论 -
局域网聊天系统__6.客户端框架实现
主要包含类:CUserInfo 和 CChatPacket 和服务器定义的一致CChatSocket用于和服务器或其他用户交互数据(类里面内置两个指针,分别指向CClientDlg和CChatDlg 以有效指针来辨别和谁通信) 重写OnReceive和OnClose 均调用对应对话框函数处理CListenSocket用于监听其他用户的连接请求 在OnAcce原创 2012-12-20 22:33:11 · 2431 阅读 · 0 评论 -
扫雷___建立工程和界面预估
创建一个工程Mine 由于扫雷只是简单的界面响应及绘制 不需要复杂的文档视图界面 因此需要对框架类进行化: 1.删除MineDoc.h MineDoc.cpp MainFrame.h MainFrame.cpp MineView.h MineView.cpp 6个文件 删除方法 在FileView视图中删除这6个文件(Delete键) 然后在工程文件夹原创 2012-11-01 10:03:11 · 1211 阅读 · 0 评论 -
局域网聊天系统__5.客户端业务逻辑与框架
客户端的需求在前面已经分析了。这里是客户端的业务逻辑: 1.初始化: 初始化用户界面(主要是列表控件) 创建并开启监听套接字 2.用户登录: 弹出登录对话框 让用户输入用户名密码以及服务器信息 根据用户输入的服务器信息创建一个新的套接字连接服务器原创 2012-12-20 22:23:53 · 1593 阅读 · 0 评论 -
局域网聊天系统__3.服务器框架实现
CUserInfo类 主要包含一些必要数据以及Serialize支持class CUserInfo : public CObject{public: DECLARE_SERIAL(CUserInfo); CUserInfo(); virtual ~CUserInfo(); CUserInfo(const CUserInfo& userInfo);原创 2012-12-20 22:16:34 · 1359 阅读 · 0 评论 -
局域网聊天系统__2.服务器业务逻辑分析
服务器业务逻辑分析: 首先分析服务器应该实现的功能,在需求分析中并没有提到客户端和客户端的通信是否需要通过服务器转发,这里选择的是客户端之间直接进行点对点通信,无需经过服务器处理,这样使得服务器的工作减少了很多,只需要管理和更新成员列表以及保存离线消息即可,服务器甚至不需要多线程的支持。 在服务器与客户端交互的过程中,一个完整的流程应该是: 1.服务器开启监听原创 2012-12-20 21:57:55 · 2120 阅读 · 0 评论 -
扫雷___核心鼠标逻辑
鼠标逻辑是扫雷最核心的部分。我们需要根据当先前鼠标位置,所在方块的状态和历史状态,游戏状态等等来综合考虑界面的体现 所需要的状态量: 雷状态:正常STATE_NORMAL,空STATE_EMPTY,未知STATE_DECKY,未知按下状态STATE_DECKY_DOWN 红旗STATE_FLAG 游戏状态:等待GS_WAIT 运行GS_RUN 失败GS_原创 2012-11-01 10:05:45 · 2097 阅读 · 0 评论 -
扫雷___界面的加载
界面加载其实没有自己想的那么复杂:窗口大小的预估及简单3D效果的绘制: 如果想做一个和window自带扫雷程序一模一样的界面。可以借用一些工具来得到一些基本的量,比如各个矩形框的大小,它们由那些线条组成,线条的宽度等等,然后对窗口块的各个组成部分进行划分,并且得到它们的大小,在验证比对之后,将这一系列的数字做成一串宏。用于之后的引用原创 2012-11-01 10:04:27 · 1705 阅读 · 0 评论 -
扫雷__重绘优化与数据持久化
刚开始在完成某些功能的时候 可能在刷新的时候都直接用的Invalidate() 这样做的好处是可以直接明了的测试当前功能模块的逻辑正确性,而不必关心具体的下一步优化。但是在界面逻辑完成之后,屏幕会闪得很厉害。这时候就可以通过一些必要的措施来优化或者减少重绘: 例如下一段用于鼠标移动动态选取雷块的代码(简化后): 上一段代码的重绘效率是相当差的 鼠标稍一移动 就原创 2012-11-01 10:17:25 · 1301 阅读 · 0 评论 -
星形密码探测器
功能:探测指定窗口的窗口信息和所在进程的必要信息,如果该窗口包含密码域,则获取该密码。 分析分为界面,窗口操作,DLL三个部分 界面:正常窗口透明窗口 控件颜色: 对话框的背景在相应WM_ERASEBKGND 的 OnEraseBkgnd中用指定背景位图通过PatBlt重绘。原创 2013-01-07 22:59:24 · 3603 阅读 · 0 评论