网络编程
lurenceGu
c/c++ 游戏服务器开发
展开
-
Winsock 完成端口模型简介
摘自《Networking Programming for Microsoft Windows》第八章“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!从本质上说,完成端口模型要求我们创建一个Win32完成端口对象,通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求原创 2010-01-21 10:48:00 · 548 阅读 · 0 评论 -
网卡的模式
改变模式需用程序实现如Sniffer类的软件一般都采用将网卡设置成混杂模式来获取数据包,设为混杂模式之后,因为网卡会接收所有能够接收到的数据,所以这个时候的数据量非常大,所以在设置为混杂模式同时,一般要设置过滤条件。sniffer之类的软件将网卡设置为混杂模式,只是供自己监听数据(根据用户的要求自动设置过滤条件),在这类软件退出之后会自动将网卡还原为正常工作模式。下面是比较详细的网卡模式介绍以太网转载 2012-03-31 13:49:28 · 1876 阅读 · 0 评论 -
setsockopt设置socket状态
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经转载 2012-03-31 13:50:35 · 706 阅读 · 0 评论 -
IOCP在服务器开发中的应用
引言基于Socket的网络通信服务已经使用得相当普遍,然而一个服务器应用程序,假如不能够同时为多个客户端提供服务,那它就没有什么意义可言。针对一个服务器应用程序底层通信模块的设计,要使其在给定的时间内同时控制几个套接字,采用重叠的I/O机制是比较好的,但是要求服务器在任何给定时间内都会为海量I/O请求提供服务,Winsock 2.0中引入的内核级完成端口(Input/Output Comp转载 2012-03-31 12:09:19 · 3387 阅读 · 1 评论 -
套接字选项和I/O控制命令
套接字选项和I/O控制命令 套接字一旦建立,通过套接字选项和I/O控制命令对各种属性进行操作,便可对套接字的行为产生影响。有的选项只用于信息的返回,而有的选项则可在应用程序中影响套接字的行为。I / O控制命令肯定会对套接字的行为产生影响。 下面着重讨论四个Winsock函数:getsockopt、setsocketopt、ioctlsocket和WSAIoctl。每个函数都有大量转载 2012-03-31 12:53:42 · 1054 阅读 · 0 评论 -
Socket select FD_ISSET
DESCRIPTION The functions gettimeofday and settimeofday can get and set the time as well as a timezone. The tv argument is a timeval struct, as specified in : struct timeval {转载 2012-04-01 14:03:21 · 7765 阅读 · 0 评论 -
select(),fd_set,FD_SET,FD_CLR,FD_ZERO,FD_ISSET的用法
本文大致记录一下我对socket编程中的select()方法,类型fd_set以及FD_SET、FD_ZERO、FD_CLR、FD_ISSET这些宏的用法的了解,有不当的地方,请指出。1 select在socket编程中,select的字面意思就是选择,也就是选择出那些可读或可写或出错的socket,其声明如下:[cpp] view plaincopyprint转载 2012-04-01 14:22:30 · 3668 阅读 · 1 评论 -
设置socket缓冲区大小
socket发送数据时候先把数据发送到socket缓冲区中,之后接受函数再从缓冲区中取数据,如果发送端特别快的时候,缓冲区很快就被填满(socket默认的是1024×8=8192字节),这时候我们应该根据情况设置缓冲区的大小,可以通过setsockopt函数实现 int setsockopt( SOCKET s, int level, int转载 2012-04-01 14:26:54 · 1456 阅读 · 0 评论 -
很幽默的讲解六种Socket I/O模型C++程序设计
本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教。一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:Overlapped I/O 事件通知模型五:Overlapped I/O 完成例程模型六:IOCP模型老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他转载 2012-03-31 19:32:41 · 2622 阅读 · 0 评论 -
浅谈过载保护
雪球:对于时延敏感的服务,当外部请求超过系统处理能力,如果系统没有做相应保护,可能导致历史累计的超时请求达到一定规模,像雪球一样形成恶性循环。由于系统处理的每个请求都因为超时而无效,系统对外呈现的服务能力为0,且这种情况下不能自动恢复。作者bison,腾讯后台开发技术总监。 过载保护,看似简单,但是要做好并不容易。这里用两个曾经经历的反面案例,给出过载保护的直观展现,并附上一点感想。转载 2012-05-14 16:10:55 · 2590 阅读 · 0 评论 -
TCP协议三次握手过程分析
TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急转载 2012-12-04 02:17:22 · 959 阅读 · 0 评论 -
socket通讯原理以及tcp、ip三次握手机制分析
要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和UDP,前转载 2012-12-04 02:34:30 · 2993 阅读 · 0 评论 -
网络编程(转)<上>
Socket简介BSD Socket接口是TCP/IP网络的API在Linux,Unix和Windows均实现这个接口.BSD Socket的是目前开发网络应用主要接口.绝大部分网络应用均可Socket来开发一个Socket队列是IP应用的基本单位.两个机器通讯相当于两个机器的两个Socket互相通讯的过程.Socket 的本意是插座.每一个激活的socket可以看成是一个跟本地某转载 2013-04-09 15:30:50 · 1239 阅读 · 0 评论 -
网络编程(转)<下>
设置和获得套接口选项获得套接口选项int getsockopt ( int sockfd, int level, int optname, void * optval, socklen_t *opteln )设置套接口选项: int setsockopt ( int sockfd, int level, int optname, const void * optval, so转载 2013-04-09 15:31:36 · 742 阅读 · 0 评论 -
WaitForMultipleObjects
DWORD WaitForMultipleObject(DWORD dwCount , CONST HANDLE* phObject, BOOL fWaitAll, DWORD dwMillisecinds); dwCount参数用于指明想要让函数查看的内核对象的数量。这个值必须在1与MAXIMUM_WAIT_OBJECTS(在Windows头文件中定义为64之间. p转载 2012-03-06 11:03:46 · 6686 阅读 · 0 评论 -
Socket一些函数相关的返回值
若无错误发生,recv()返回读入的字节数。如果连接已中止,返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。如无错误发生,listen()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。如无错误发生,则bind()返回0。否则的话,将返回SOCKET_转载 2012-03-06 10:56:30 · 2925 阅读 · 0 评论 -
流量控制和拥塞控制
拥塞(Congestion)指的是在包交换网络中由于传送的包数目太多,而存贮转发节点的资源有限而造成网络传输性能下降的情况。拥塞的一种极端情况是死锁(Deadlock),退出死锁往往需要网络复位操作。流量控制(Flow Control)指的是在一条通道上控制发送端发送数据的数量及速度使其不超过接收端所能承受的能力,这个能力主要指接收端接收数据的速率及接收数据缓冲区的大小。通常采用停等法或滑转载 2012-03-06 15:23:39 · 660 阅读 · 0 评论 -
基于select I/O模型的远程目录浏览与多线程文件下载
摘要: 服务器端基于select I/O模型。为防止程序界面阻塞, 有一个子线程用于不断接收socket并select其中的处理。客户端只有一个线程函数, 不过其利用率很高, 可用于远程目录交换, 请求文件大小, 创建若干线程来下载文件。文件传输有上传和下载,还有对等传输, 这个项目中, 传输文件具体指下载。 正文:一 数据及数据结构1 传送包, 客户端主线程给子线程传递的结构体type转载 2009-12-10 12:38:00 · 1022 阅读 · 0 评论 -
用完成端口开发大响应规模的Winsock应用程序
原文出处:http://msdn.microsoft.com/msdnmag/issues/1000/Winsock/通常要开发网络应用程序并不是一件轻松的事情,不过,实际上只要掌握几个关键的原则也就可以了——创建和连接一个套接字,尝试进行连接,然后收发数据。真正难的是要写出一个可以接纳少则一个,多则数千个连接的网络应用程序。本文将讨论如何通过Winsock2在Windows NT 和 Windo转载 2009-12-10 12:41:00 · 756 阅读 · 0 评论 -
如何创建和使用socket链接池
采用CS方式的程序不可避免都要碰到socket连接的问题,很多时候,使用编程语言当中自带的socket库,使用起来多少有些不习惯,虽然系统自带的库在很多异常处理,稳定性上下了很多功夫,但是要去理解和使用那些库,比如做socket连接池不免要走很多弯路。在这里我和大家讨论下怎么样创建和使用socket链接池。 一般socket链接有以下两种方式:长(常)链接和短链接。 长链接:当数据转载 2009-12-10 12:45:00 · 777 阅读 · 0 评论 -
论软件接口中几种底层通讯的实现
一、 概述 软件接口是实现一个系统跟另外系统进行信息交互的桥梁,在不同的系统之间,根据系统的关联程度的不同存在紧耦合和松耦合两种:紧耦合要求接口响应反应快,消息不能阻塞;松耦合对响应反应要求比较低。本人主要讨论紧耦合接口通讯实现,在目前应用中,Socket、中间件、SOAP等都用相应的应用,但是应用中发现各通讯方式有自己固有的特征,"适合的才是最好的",这是真理。 在接口和系统信息交互的过程中转载 2009-12-10 12:47:00 · 630 阅读 · 0 评论 -
游戏开发流程和部分分工
游戏开发流程和部分分工 流程:调研 -- 开发 -- 测试 -- 运营(我们公司的情况分析) 公司类型介绍:游戏开发公司、游戏运营公司、游戏开发运营公司开发部门构成:策划(灵魂)8-10人 主策划、执行策划、脚本策划、文案策划、关卡策划、数值策划、界面策划程序(骨肉)8-10人 主程、客户端引擎、服务器端引擎、逻辑程序员、3D程序、AI程序、物理转载 2009-12-23 10:06:00 · 1549 阅读 · 0 评论 -
MD2文件的读取及三维动画显示
摘要 本文介绍了运用OpenGL,通过读取MD2文件开发复杂三维动画的方法,从而实现OpenGL与其它软件相结合创建复杂场景的能力,为快速开发复杂三维动画程序提供了捷径,并给出了一个实例。关键词 开放图形库; 文件格式;三维建模 1 前言OpenGL被严格定义为“一种到图形硬件的软件接口”。从本质上说,它是一个完全可移植并且速度很快的3D图形和建模库。转载 2010-03-12 11:03:00 · 4663 阅读 · 0 评论 -
转贴:网络游戏封包基础 作者不明
要想在修改游戏中做到百战百胜,是需要相当丰富的计算机知识的。有很多计算机高手就是从玩游戏,修改游戏中,逐步 对计算机产生浓厚的兴趣,逐步成长起来的。不要在羡慕别人能够做到的,因为别人能够做的你也能够!我相信你们看了本教程后,会对游戏有一个全新的认识,呵呵,因为我是个好老师!(别拿鸡蛋砸我呀,救命啊!#¥%……*) 不过要想从修改游戏中学到知识,增加自己的计算机水平,可不能只是转载 2010-01-05 13:45:00 · 1781 阅读 · 0 评论 -
简单游戏服务器客服端搭建
客户机: Login()// 登入模块{ 初始化游戏数据; 获取用户输入的用户和密码; 与服务器创建网络连接; 发送至服务器进行用户验证; ... 等待服务器确认消息; ... 获得服务器反馈的登入消息; if( 成立 ) 进入游戏; else 提示用户登入错误并重新接受用户登入;}Game()// 游戏循环部分{ 绘制游戏场景、人物以及其它元素; 获取用户操作输入; 将用户的操作发转载 2010-01-05 13:48:00 · 11060 阅读 · 1 评论 -
开发版本控制
软件版本控制需要明确的概念软件版本控制指的是所有能自行运行的系统或者子系统的版本控制。 项目版本的确立需要整个项目小组共同决定。 项目版本的版本号组成大致有三部分组成:主版本号+次版本号+改动号 主版本号的变更由项目有重大突破或者结构出现了变更的情况下出现。 次版本号由修复bug或者小的变动使用。(一般是2位的数字) 改动号是用于每天项目更新后的标记。一般采用当日Year+month+day来原创 2010-03-25 15:43:00 · 553 阅读 · 0 评论 -
torque引擎内核 线程 pool
//-----------------------------------------------------------------------------// Torque Game Engine Advanced// Copyright (C) GarageGames.com, Inc.//---------------------------------------------------原创 2010-03-25 15:45:00 · 1084 阅读 · 0 评论 -
C++中模板类使用友元模板函数
问题始于学习数据结构,自己编写一个单链表,其中用到了重载输出运算符template class List{ friend std::ostream& operator & slist); //……};用vs2008可编译,但无法链接:无法解析的外部符号……后来上网查改为template class List{ friend std::ostream& operator原创 2010-03-25 16:49:00 · 798 阅读 · 0 评论 -
torque 碰撞检测盒
bool SceneObject::collideBox(const Point3F &start, const Point3F &end, RayInfo *info){ const F32 * pStart = (const F32*)start; const F32 * pEnd = (const F32*)end; const F32 * pMin = (const F32*)原创 2010-03-25 18:52:00 · 644 阅读 · 0 评论 -
跨平台网络库的设计
近期在开发一个跨平台的网络库,其目的是为了封装网络底层细节,对外提供一个简易的接口,在这里记载一下设计思路。 网络游戏服务器通常需要2种网络IO:一种是面向大量客户端连接的高连接数的网络IO,一种是服务器间的低连接数,高吞吐量的网络IO,后一种网络IO比较简单,可采取阻塞转载 2011-07-18 00:19:47 · 2668 阅读 · 0 评论 -
关于 window c++ 编译 soket 重复定义的问题
在编译器中加上 _WINSOCKAPI_ 宏原创 2015-11-04 21:06:25 · 762 阅读 · 0 评论