左雪菲的专栏

欢迎访问我的个人网站:http://www.hootina.org

排序:
默认
按更新时间
按访问量

从零学习游戏服务器开发(四)LogServer源码探究

这是从零学习开源项目的第四篇,上一篇是《从零学习开源项目系列(三) CSBattleMgr服务源码研究》,这篇文章我们一起来学习LogServer,中文意思可能是“日志服务器”。那么这个日志服务器到底做了哪些工作呢?我们在Visual Studio中将LogServer设置为启动项,然后按F5将L...

2018-05-23 10:52:03

阅读数:157

评论数:0

从零实现一款12306抢票软件

写在前面的话每年逢年过节,一票难求读者肯定不陌生。这篇文章,我们带领读者从零实现一款12306刷票软件,其核心原理还是通过发送http请求模拟登录12306网站的购票的过程,最后买到票。关于http请求的格式和如何组装http数据包给服务器发送请求,我们在上一篇文章《从零实现一个http服务器》中...

2018-05-21 12:10:03

阅读数:395

评论数:0

从零实现一个http服务器

我始终觉得,天生的出身很重要,但后天的努力更加重要,所以如今的很多“科班”往往不如后天努力的“非科班”。所以,我们需要重新给“专业”和“专家”下一个定义:所谓专业,就是别人搞你不搞,这就是你的“专业”;你和别人同时搞,你比别人搞的好,就是“专家”。说到http协议和http请求,很多人都知道,但是...

2018-05-18 12:44:42

阅读数:373

评论数:1

从零学习游戏服务器开发(三) CSBattleMgr服务源码研究

如上图所示,这篇文章我们将介绍CSBattleMgr的情况,但是我们不会去研究这个服务器的特别细节的东西(这些细节我们将在后面的文章中介绍)。阅读一个未知的项目源码如果我们开始就纠结于各种细节,那么我们最终会陷入“横看成岭侧成峰,远近高低各不同”的尴尬境界,浪费时间不说,可能收获也是事倍功半。所以...

2018-05-17 10:44:07

阅读数:271

评论数:0

从零学习游戏服务器开发(二) 最后一战概况

这份代码我也是无意中来自一个朋友,据他说也是来源于互联网,服务器端代码原来是linux版本的,但被厉害的大神修改成可以在Windows上运行。(如果不小心侵犯了您的版权,请联系我删除)。好在,这份代码中使用的大多数方法和接口都是可以跨Windows和linux两个平台的,所以linux开发下的朋友...

2018-05-15 10:44:43

阅读数:311

评论数:0

从零学习游戏服务器开发(一) 从一款多人联机实时对战游戏开始

写在前面的话      经常有学生或者初学者问我如何去阅读和学习一个开源软件的代码,也有不少朋友在工作岗位时面对前同事留下的项目,由于文档不完善、代码注释少、工程数量大,而无从下手。本文将来通过一个多人联机实时对战游戏——最后一战,来解答以上问题。      其实,我以上问题在我是一个学生时,我也...

2018-05-15 10:43:55

阅读数:368

评论数:0

理解Java Integer的缓存策略

本文将介绍 Java 中 Integer 缓存的相关知识。这是 Java 5 中引入的一个有助于节省内存、提高性能的特性。首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为。接着我们将学习这种实现的原因和目的。你可以先猜猜下面 Java 程序的输出结果。很明显,这里有一...

2018-04-26 16:34:17

阅读数:202

评论数:0

将NULL指针赋值给std::string变量导致程序崩溃

如题:如上图,但是我们还会经常写这样的代码,例如我的flamingo中有代码如下(已经修正):位于queryresult.cpp中如果fields[i].name为NULL的话,程序将崩溃。备忘一下,以后将char*类型赋值给std::string类型一定记得检测一下是否为空指针。...

2018-04-26 14:44:35

阅读数:104

评论数:0

用Android Studio进行NDK编程入门实例

参考了网上各种教程,跌跌撞撞最终才把流程走通,特此记录一下:有必要先交代下开发环境:操作系统:Win7Android Studio 3.0.1gradle 3.0.1首先,新建一个Android项目,然后在MainActivity的布局文件activity_main.xml文件中新增一个测试按钮,...

2018-04-17 20:04:15

阅读数:255

评论数:0

解决无法链接GetFileVersionInfoSize、GetFileVersionInfo或VerQueryValue

xsvrDlg.obj : error LNK2019: unresolved external symbol _GetFileVersionInfoSizeW@8 referenced in function "public: int __thiscall CXsvrDlg::...

2018-04-10 13:33:37

阅读数:54

评论数:0

这些年一直记不住的 Java I/O

阅读目录参考资料前言从对立到统一,字节流和字符流从抽象到具体,数据的来源和目的从简单到丰富,使用 Decorator 模式扩展功能Java 7 中引入的 NIO.2NIO.2 中的异步 I/O总结回到顶部参考资料  该文中的内容来源于 Oracle 的官方文档。Oracle 在 Java 方面的文...

2018-04-02 22:27:36

阅读数:268

评论数:0

Java String转byte数据长度不对

今天,在用Java设计一个网络通信协议时,将一个String通过其getBytes()方法转换成byte[]时,其长度不对,记录一下。byte[] byte1 = new byte[50]; String str = new String(byte, 0, 50); //此时byte1.len...

2018-03-18 13:39:20

阅读数:143

评论数:0

2018年年初的面试经验谈

说下我的面试经验吧,都是亲身经历,不喜勿喷:我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的。先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理。我本人也是上几家公司的面试官,因为接下来几年面临着成家养小孩,...

2018-03-15 13:57:46

阅读数:1765

评论数:3

开源网狐棋牌游戏可部署版本源码

这里我开源一款我的维护的网狐游戏源代码,这份代码取自网络,经我历时两年多的研究和修改,现在不仅可以编译、调试还可以部署运行,包括:1. 登录服务器源码2. 中心服务器源码3. 游戏服务器源码4. 后台MSSQLServer建表sql和存储过程5. 100多款棋牌游戏截图如下:代码下载地址:关注我的...

2018-03-14 23:02:34

阅读数:639

评论数:0

金山卫士开源代码

自从金山卫士的代码部分开源以来,基于它出现了各种软件,有侧重界面库的,如SOUI,有侧重电脑安全管理的,下面是我维护的版本的部分截图:主界面垃圾清理ARP防火墙隐私保护器对于广大开发者尤其是广大做Windows安全方面的朋友来说,这套代码具有很大的借鉴意义,至少我们可以知道那些所谓的“电脑管家”到...

2018-03-14 22:10:49

阅读数:843

评论数:1

Gh0st源码分析(一)——Ghost简介和编译

     相信很多人都听说过Gh0st这款软件,它和灰鸽子等软件一样是十多年前安全方面的代表。本人有幸拿到一款Gh0st软件的源码,经我的改造,修正大量bug,终于让这款软件能在现在的Windows操作系统上正常运行。虽然,很多做法在新的操作系统中已经过时或者没有必要,但是其软件的架构原理、过杀毒...

2018-02-15 16:20:30

阅读数:757

评论数:2

git合并远程仓库上的提交记录

有时候,我们用git提交代码时,因为我们的疏忽,会导致同一个问题,修改多次,因为反复提交多次,最终稳定下来,我们想把git上这些不成熟的提交记录合成一个终极记录。例如:git上依次有如下提交(按提交时间从新到旧):提交记录k提交记录m提交记录n4提交记录n3提交记录n2提交记录n1提交记录p提交记...

2018-01-31 17:59:30

阅读数:399

评论数:0

centos7 cannot find -lstdc++ 错误

解决CentOS 7 中,make源文件时出现 /usr/bin/ld: cannot find -lstdc++ 错误在CentOS 7中,使用static方法编译,需要安装static version of glibc-static libstdc++-static。使用如下命令安装yum i...

2018-01-13 20:43:06

阅读数:584

评论数:0

git分支管理

git分支确实是一个非常好的东西,先看一个截图吧:这个图其实是很有讲究的,其中历史上的工作顺序是从C0->C1->C2->...->C13。下面开始正式备忘一下git与分支有关的记录。首先,需要明确的一个概念是...

2018-01-09 21:26:22

阅读数:596

评论数:0

Android--UI布局

概述  布局(Layout)的概念是针对Activity的,Activity就是布满整个Android设备的窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,每个需要显示的Activity都需要在AndroidManifest.xml文件之中声明。  通常情况下,...

2018-01-07 20:04:54

阅读数:165

评论数:0

Android Studio下的build工具路径和设置位置

Android Studio下的编译工具gradle的安装路径在:磁盘路径\Android Studio\gradle\m2repository\com\android\tools\build\gradle而不是:磁盘路径\Android Studio\gradle\项目中配置gradle的位置是...

2018-01-06 12:11:49

阅读数:831

评论数:0

C++11中调用函数内部定义匿名lamda函数

#include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { int i = 0; int j = 0; [i, j](int k, int j) { ...

2018-01-05 21:29:38

阅读数:305

评论数:0

关于std::shared_ptr与std::enable_shared_from_this循环引用导致的问题

自从C++11有了std::shared_ptr这样的智能指针,作为C++程序只要将一个堆上的类对象用std::shared_ptr包裹一下就可以做到内存自动释放了。看一个例子:#include "stdafx.h" #include class A { public: ...

2017-12-21 18:47:41

阅读数:276

评论数:0

Java中的HashMap

http://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665514069&idx=1&sn=2996d864bbe596d0af763fba3d244fa7&chksm=80d67c16b7a1f500ec6a1...

2017-12-01 09:38:58

阅读数:175

评论数:0

Mysql中LAST_INSERT_ID()的函数使用详解

see: http://www.jb51.net/article/62973.htm

2017-11-22 10:55:09

阅读数:189

评论数:0

一位10年Java工作经验的架构师聊Java和工作经验

黄勇,从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师。对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式。国内开源软件推动者之一,Smart Framework 开源框架创始人。热爱技术交流,乐于分享自己的工作经验。著有《...

2017-11-06 20:54:54

阅读数:670

评论数:0

客户端软件的结构思考(一)

关于这个标题的内容我思考了很多年,也求索了很多年,每次遇到一份新的质量看起来不错客户端软件的源码时,我总是不自己觉的去学习它和研究它,以期能解决我的困惑,希望能达到我心中“完美”方案的样子。但是直到今天,我仍然没找到所谓的“完美”的答案,但是在这个成长过程中,因为借鉴、融合和吸纳了许多其他的pc软...

2017-10-30 17:13:22

阅读数:1165

评论数:0

网络编程难点解析(二)—— TCP之心跳包实现思路

心跳包机制       心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。也有的心跳包中会携带一些需要定期更新的信息。       在TC...

2017-10-29 21:28:09

阅读数:1027

评论数:0

网络编程难点解析(一) —— 网络异常检查

一、本文目的在涉及网络编程的实际项目应用中,由于网络不可能一直处于理想状态,TCP长连接也可能随时正常或异常地断开,如果不予处理,那么就可能因此而给程序带来很多潜在的问题。 编写该文档的目的就在于针对网络程序中可能遇到的各种问题,拿出来与大家探讨一下具体问题的解决方案,同时本人将前期调研的一些解决...

2017-10-29 21:13:53

阅读数:721

评论数:0

关于std::move和std::forward

这篇文章介绍的真不错:http://www.cnblogs.com/catch/p/3507883.html总结起来:1. std::move是将左值变成右值减少不必要的拷贝;2. std::forward保持一个值的左值和右值特性不变,以变传给既能接受左值又能接受右值的函数,例:template...

2017-10-23 13:55:54

阅读数:314

评论数:0

关于C++11中的std::XXX<void>

一般常见的有:std::sharedstd::weak_ptrstd::unique_ptrstd::function第一个、第二个和第三个的意思是:make a smart pointer which can point to many different types of data struc...

2017-09-01 12:49:15

阅读数:645

评论数:0

关于std::bind绑定栈变量对象的思考

我一直以为std::bind函数在给某个函数绑定参数时,如果参数是栈变量,且是类对象,等实际调用std::bind函数时,因为传递的栈变量参数已经不存在了,会导致程序崩溃,但实际上并不是这样,看代码:#include #include class A { public: A() ...

2017-08-31 18:07:08

阅读数:417

评论数:0

Java服务器与客户端通信框架初探

这篇文章中,我们讲述一下用Java实现网络通信的的基本流程,这里讲述的是不基于任何框架的原生语言自带的写法。Java服务器端写法:程序入口代码如下:public static void main(String[] args) { try { // ① 创建一个线程 等其他客户端的连接 f...

2017-08-21 16:06:40

阅读数:1973

评论数:0

win32程序显示网页

说是win32,实际程序中使用了atl的东西。所以新建win32程序时,记得勾选使用atl:代码如下:#include "stdafx.h" #include "Win32Project3.h" #include CComModule _Module; #...

2017-08-02 13:25:39

阅读数:495

评论数:0

DuiLib消息处理剖析

文章来源:http://blog.csdn.net/zhuhongshu/article/details/41725657分为几个大部分:控件容器(本质也是控件)UI构建解析器(XML解析)窗体管理器(消息循环,消息映射,消息处理,窗口管理等)渲染引擎DuiLib 消息循环剖析DuiLib的消息循...

2017-07-23 11:16:17

阅读数:588

评论数:0

开源一款资源分享与下载工具 —— 电驴(eMule)

这里分享一款资源分享与下载工具——电驴,其实严格来说,应该叫电骡,这是我维护的版本,eMuleVeryCD版本,VeryCD是一个不错的资源分享网站:http://www.verycd.com/。大概在08年之前,中国市场流行的下载工具大概有三款:网际快车(flashget)、电驴(eMule)和...

2017-07-07 10:41:07

阅读数:2209

评论数:10

关于windows完成端口(IOCP)的一些理解

本人很多年前接触完成端口以来,期间学习和练习了很多次,本以为自己真正地理解了其原理,最近在看网狐的服务器端源码时又再一次拾起完成端口的知识,结果发现以前理解的其实很多偏差,有些理解的甚至都是错误的。网络上关于windows完成端口的介绍举不胜举,但大多数都是介绍怎么做,而不是为告诉读者为什么这么做...

2017-07-06 16:22:57

阅读数:3891

评论数:4

TeamTalk源码分析(十一) —— pc客户端源码分析

       ——写在前面的话        在要不要写这篇文章的纠结中挣扎了好久,就我个人而已,我接触windows编程,已经六七个年头了,尤其是在我读研的三年内,基本心思都是花在学习和研究windows程序上了。我很庆幸我当初学习windows程序走了一条正确的路线:先是学习常用的window...

2017-07-05 16:03:45

阅读数:8435

评论数:9

开源一款ftp软件——filezilla

filezilla是一款高性能ftp/sftp文件工具,关于它的具体的介绍可参见其官网:https://www.filezilla.cn/。其原作者是Tim Kosse (tim.kosse@filezilla-project.org)。大概10年前我从校园网ftp资源时无意中接触到这款软件的客户...

2017-06-28 18:56:28

阅读数:2285

评论数:0

开源一款远程控制软件 —— pcshare

这里开放一款远程控制软件的源码——pcshare,该软件分为被控制端和控制端。部分界面如下:控制端通过寄生在被控制端的后台程序来实现控制,可以对被控制台进行文件管理、屏幕监控、键盘监控、监控管理、查看被控制端的服务和注册表,甚至是控制被控制端的摄像头。一、软件使用方法介绍:1. 启动PcShare...

2017-06-01 22:35:53

阅读数:8173

评论数:6

git配置ssh key并从github.com拉取repos

一、配置ssh key1. 进入当前用户目录cd ~2. 生成ssh keyssh-keygen -t rsa -C "ABC@qq.com"ABC@qq.com账号必须是你登录github的账户名中间如果提示文件已经存在可以选择覆盖,提示输入密码,可以直接按Enter跳过。$...

2017-05-25 16:57:07

阅读数:1401

评论数:0

TeamTalk源码分析(十) —— 开放一个TeamTalk测试服务器地址和几个测试账号

由于TeamTalk是用于企业内部的即时通讯软件,一般客户端并不提供账号注册功能。如果你仅对TeamTalk的客户端感兴趣,你可以仅仅研究pc端和移动端代码。官方的测试服务器地址已经失效,所以我已经部署了一套TeamTalk服务器,并建立了几个测试账户可以供你使用:tangsengsunwukon...

2017-05-25 12:08:05

阅读数:3351

评论数:13

TeamTalk源码分析(九) —— 服务器端route_server源码分析

route_server的作用主要是用户不同msg_server之间消息路由,其框架部分和前面的服务类似,没有什么好说的。我们这里重点介绍下它的业务代码,也就是其路由细节:void CRouteConn::HandlePdu(CImPdu* pPdu) { switch (pPdu-&a...

2017-05-20 15:49:18

阅读数:2077

评论数:5

TeamTalk源码分析(八) —— 服务器端file_server源码分析

         这篇文章我们来介绍file_server服务的功能和源码实现。TeamTalk支持离线在线文件和离线文件两种传送文件的方式。单纯地研究file_server的程序结构没多大意义,因为其程序结构和其他几个服务结构基本上一模一样,前面几篇文章已经介绍过了。 我们研究teamtalk的...

2017-05-20 15:04:38

阅读数:2029

评论数:1

TeamTalk源码分析(七) —— 服务器端msf源码分析

这篇文章是对TeamTalk服务程序msfs的源码和架构设计分析。msfs作用是用来接受teamtalk聊天中产生的聊天图片的上传和下载。还是老规矩,把该服务在整个架构中的位置图贴一下吧。可以看到,msfs仅被客户端连接,客户端以http的方式来上传和下载聊天图片。可能很多同学对http协议不是很...

2017-05-19 18:13:55

阅读数:4667

评论数:8

WinInet使用详解

WinInet是windows平台对socket进行一层封装,用来直接处理http/ftp/Gopher协议的一套windows API。我第一次接触这个是在一个客户那里,当时因为客户都需要使用http代理才能浏览网页,所以折腾了一天,才基本掌握。而时隔没多久又忘记的差不多了,这个流程就像正则表达...

2017-05-19 10:35:16

阅读数:1763

评论数:0

TeamTalk源码分析(六) —— 服务器端login_server源码分析

login_server从严格意义上来说,是一个登录分流器,所以名字起的有点名不符实。该服务根据已知的msg_server上的在线用户数量来返回告诉一个即将登录的用户登录哪个msg_server比较合适。关于其程序框架的非业务代码我们已经在前面的两篇文章《TeamTalk源码分析(四) —— 服务...

2017-05-18 16:42:27

阅读数:2437

评论数:2

TeamTalk源码分析(五) —— 服务器端msg_server源码分析

在分析msg_server的源码之前,我们先简单地回顾一下msg_server在整个服务器系统中的位置和作用:各个服务程序的作用描述如下:LoginServer (C++): 负载均衡服务器,分配一个负载小的MsgServer给客户端使用MsgServer (C++): 消息服务器,提供客户端大部...

2017-05-18 15:21:06

阅读数:2788

评论数:2

TeamTalk源码分析(四) —— 服务器端db_proxy_server源码分析

从这篇文章开始,我将详细地分析TeamTalk服务器端每一个服务的源码和架构设计。这篇从db_proxy_server开始:db_proxy_server是TeamTalk服务器端最后端的程序,它连接着关系型数据库mysql和nosql内存数据库redis。其位置在整个服务架构中如图所示:我们从d...

2017-05-17 18:07:32

阅读数:3374

评论数:3

将char* 赋值给std::string的一些陷阱

这段时间,总是要使用char或者char* 赋值给std::string,踩了不少坑。于是写了个测试代码: #include #include using namespace std; int main(int argc, char* argv[]) { string str1;...

2017-05-12 16:30:56

阅读数:4472

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭