12 2011 档案
摘要:1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLing
阅读全文
摘要:1 bool Juge(int dat, int x){return !(dat & ~(1 << x));}2 cout << boolalpha << ((i & (i - 1)) ? false : true) << endl;
阅读全文
摘要:手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解 ----- By PiggyXP(小猪)前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始动笔了,但愿还不算晚….. 这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口的用法,本文附带了有详尽注释的使用MFC编写的图形界面的示例代码。 我的初衷是希望写一份互联网上..
阅读全文
摘要:默认情况下,一个线程的栈要预留1M的内存空间 而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程 但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。 你也可以通过连接时修改默认栈大小,将其改的比较小,这样就可以多开一些线程。 如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程。 即使物理内存再大,一个进程中可以起的线程总要受到2GB这个内存空间的限制。 比方说你的机器装了64GB物理内存,但每个进程的内存空间还是4GB,其中用户态可用的还是2GB。 如果是同一台机器内的话,能起多少线程也是受内存限制的。每个线程对象都要站用非页面内存
阅读全文
摘要:我的观点基于以下几点:若显卡不支持非2的次幂纹理,则:1:若使用IDirect3DDevice9::CreateTexture创建非2的次幂尺寸图像将失败2:若使用D3DXCreateTexture创建非2的次幂图像将被扩充成2的次幂3:若使用D3DXCreateTextureFromFileInMemoryEx创建非2的次幂图像将被扩充成2的次幂(就算用了D3DX_DEFAULT_NONPOW2也没用)只有一个函数比较特殊:D3DXCreateTextureFromFileEx,用它创建图像可以完美支持非2的次幂图像,但实际游戏中很少用这个函数,故总体上,创建一个非2的次幂纹理,还是显卡说了
阅读全文
摘要:一 今天碰到一个问题,UI有个界面模糊,其他界面正常,原因是:美术给的图片非2的N次方,而用D3DXCreateTextureFromFileEx创建纹理时,大小设置的是D3DX_DEFAULT,这样D3D默认会把问了创建为2的N次方,也就是会放大纹理。但是使用时又会按原始大小使用,相当于又把创建的纹理缩小,导致模糊的产生二 修改方式1 D3DXCreateTextureFromFileEx使用D3DX_DEFAULT_NONPOW2设置大小2 美术修改图片到2的N次方大小三 其他1 D3DX_DEFAULT_NONPOW2有些显卡可能不支持,需要检测设备能力2 D3DX_DEFAULT_NO
阅读全文
摘要:2010-04-07 00:16:34|分类: 网络开发 |标签: |字号大中小订阅 考虑到以后可能要用到服务器程序,如果没有现成的、稳定的代码,到时候可能会遇到麻烦。所以,最近一有空,就写服务器的框架代码。问题一:select模型如何得知连接中断?select模型只有三种套接字集合:发送、接收、异常。那么,怎么知道远程客户端中断了网络连接呢?跟踪调试发现,当远程客户端主动中断连接时,服务器接收到长度为0的数据包。这一点很好理解。因为TCP连接中断时,客户端和服务器会相互发送通知数据包。这个数据包没有内容,只有TCP/IP报头。所以,内容长度为0,这是可以理解的。于是,在接收到长度为0的数据包
阅读全文
摘要:之前的测试都是,手动强制关闭客户端进程,然后查看服务器的情况,结果往往是,服务器收到了客户端关闭的事件。其实,我一直忽略了一个问题,我没有拔掉网线来测试! 上面的手动关闭客户端进程,事实上并不能测试出想要的结果,因为进程是在应用层的,所以,这种测试方法不能保证网络驱动层也不发送数据报文给服务器。经过测试发现,当应用层强制结束进程时,对于TCP连接,驱动层会发送reset数据包!而服务器收到这个数据包就可以正常关闭了! 那么,如果拔掉网线呢,服务器收不到这个数据包,就会导致死连接存在! 所以,心跳包是必要的,或者使用TCP协议本身的Keep-alive来设置。 之所以产生前面的误解,也是由...
阅读全文
摘要:作者:JJH本文仅供参考,不代表17173.com观点 1.游戏外挂分类 ⑴按实现方式 ㈠脱机式 完全脱离游戏客户端程序,可以与游戏服务器自由通讯的外挂程序,开发难度最大,普通的100多开,对游戏的危害最大,严重破坏游戏市场、影响玩家正常游戏、缩短游戏运营周期。 ㈡内挂式: 以游戏客户端程序为载体,依靠客户端程序来完成与游戏服务器的通讯 ①调用游戏相关功能函数为主 ②调用游戏明文发包函数为主 此内挂开发流程基本与①相同, 只是主要挂机功能函数通过外挂组织明文包直接调用明文发包函数实现。目前此类外挂制作方式越来越流行,原因如下: A。 游戏的中的怪物、技能等数据结构越来越复杂...
阅读全文
摘要:MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。 Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了"字节串"而不是"字符串"这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。 MD5将任意长度的"字节串"变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源
阅读全文