网络编程
文章平均质量分 72
工程师WWW
R
展开
-
最简单client和server通信程序
开两个vc或者建两个工程,先运行server再运行clientserver端: #include #include #pragma comment(lib,"ws2_32.lib")void main(){ //创建套接字 WORD myVersionRequest; WSADATA wsaData; myVersionRequest=MAKEWORD(原创 2009-09-02 19:35:00 · 2169 阅读 · 2 评论 -
TCP/IP通信程序设计的丰富多样性
刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程 序,据此一些人可能会认为TCP/IP编程很简单。其实不然, TCP/IP编程具有较为丰富的内容。其编程的丰富性主要体现在 通信方式和报文格式的多样性上。一。通信方式:主要有以下三大类:(一)SERVER/CLIENT方式1.一个Client方连接一个Server方,或称点对点(peer to原创 2011-10-28 09:43:17 · 1370 阅读 · 0 评论 -
Windows与Linux下进程间通信技术比较
一般我们写的程序都是以单个进程的方式来运行的,比较少涉及到多进程。特别是在windows下,因为Windows是按照线程来分配CPU时间片的,线程是最小的调度单位,所以在Windows下更多的用到多线程,在同一个进程里创建多个线程来执行不同的任务,达到充分利用CPU的目的。线程之间可以共享进程的资源,比如内存、变量,但是多线程有一个不好的地方,由于这些线程是在同一个进程空间里执行,所以只要一个线程原创 2011-10-28 09:48:18 · 2854 阅读 · 0 评论 -
WaitForSingleObject和 WaitForMultipleObjects
DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds );参数: hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果事件是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT原创 2011-10-28 10:40:55 · 3111 阅读 · 1 评论 -
CreateThread、_beginthread和_beginthreadex区别
----------------------------------创建线程函数的区别------------------------------------------------------------CreateThread、_beginthread和_beginthreadex都是用来启动线程的,但大家看到oldworm没有提供_beginthread的方式,原因简单,_begin原创 2011-11-01 14:03:41 · 1953 阅读 · 0 评论 -
linux网络服务器模型
Linux系统网络服务器模型主要有两种:并发服务器和循环服务器。所谓并发服务器就是在同一个时刻可以处理来自多个客户端的请求;循环服务器是指服务器在同一时刻指可以响应一个客户端的请求。而且对于TCP和UDP套接字,这两种服务器的实现方式也有不同的特点。 1、TCP循环服务器:首先TCP服务器接受一个客户端的连接请求,处理连接请求,在完成这个客户端的所有请求后断开连接,然后再接受下一个客户原创 2011-11-05 17:18:25 · 1907 阅读 · 0 评论 -
MFC的socket
微软的MFC把复杂的WinSock API函数封装到类里,这使得编写网络应用程序更容易。CAsyncSocket类逐个封装了WinSock API,为高级网络程序员 提供了更加有力而灵活的方法。这个类基于程序员了解网络通讯的假设,目的是为了在MFC中使用WinSock,程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS 间转换字符的任务。为了给程序员提供更方便的接口以自动处理这些任务,原创 2011-11-21 14:27:53 · 12007 阅读 · 1 评论 -
SocketAPI、CAsyncSocket、CSocket 简介
要进行网络编程就要和Socket打交道,Socket有同步阻塞方式和异步非阻塞方式两种使用,事实上同步和异步在我们编程的生涯中可能遇到了很多,而Socket也没什么特别。虽然同步好用,不费劲,但不能满足一些应用场合,其效率也很低。 或许初涉编程的人不能理解“同步(或阻塞)”和“异步(或非阻塞)”,其实简单两句话就能讲清楚,同步和异步往往都是针对一个函数来说的,“同步”就是函数直到其要原创 2011-10-08 12:47:53 · 1211 阅读 · 0 评论 -
利用WinInet类进行TCP/IP通信
WinInet是一个比Winsock高一层的API,但它只适用于HTTP、FTP和gopher的客户端程序(同步异步模式都可以)我们不能用WinInet创建服务器程序,wininet.dll独立于winsock.dll 在提供专业性客户端程序支持方面,WinInet远远超过了Winsock 优点:1.缓冲机制; 2.安全机制;3.Web代理访问; 4.提供I/O缓冲; 5.AP原创 2011-12-20 22:38:40 · 2297 阅读 · 0 评论 -
Windows Socket五种I/O模型——代码全攻略
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了选择(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确,而且综合原创 2011-10-03 11:26:25 · 1671 阅读 · 0 评论 -
socket网络编程之一:客户端和服务器端接口函数
以下为winsock。 1. socket网络编程分为客户端和服务器端,客户端发送请求,服务器端进行应答; 建立连接时,服务器端绑定端口监听(bind&listen),客户端发送连接请求(connect),然后服务器端接受请求accept,至此客户端和服务器端可以收发消息。 需要注意: 1)创建socket前需要调用WSAStartup,对socke原创 2011-12-26 22:08:54 · 2673 阅读 · 0 评论 -
后台服务程序开发
一直感觉VC++太复杂了,但昨天看了汪蒲阳编著的因特网应用编程,其中写到后台服务程序的编写,论述的非常详细,而且逻辑清晰,看了之后感觉明白不少,故拿来与需要之人共享,并更正了原程序的一些错误,补充了一些材料。另外还有一种用C++编写后台服务程序的思路(不算.NET上服务程序开发模型),以后整理好了再发上来。 在2000/XP等基于NT 的操作系统中,有一个服务管理器,它管理的后台进程被称为原创 2012-01-04 23:22:12 · 2393 阅读 · 0 评论 -
TCP状态迁移图浅析
一.TCP简介 TCP提供一种面向连接的,可靠的字节流服务。面对连接意味着两个使用TCP的应用,在彼此交换数据之前必须先建立一个连接。TCP通过以下方式提供可靠性: 1. 应用数据被分割成TCP认为最适合发送的数据块,由TCP传递给IP的信息单位成为报文段。 2. 当TCP发出一个段后,它就启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一原创 2012-02-01 16:47:16 · 6973 阅读 · 0 评论 -
Windows线程函数概述 - 《C++编程艺术》
Windows提供了多组支持多线程的应用程序接口(API)函数。许多读者已经对Windows提供的多线程函数有一定程度的了解,但是对于那些不熟悉这些的读者,本章提供了这些函数的概述。记住,Windows提供了许多其他的基于多线程的函数,这些函数需要您自己去探索。为了使用Windows的多线程函数,必须在程序中包含。3.4.1 线程的创建和终止Windows API提供了CreateTh原创 2012-02-23 10:24:44 · 2470 阅读 · 0 评论 -
ACE反应器(Reactor)模式
1.ACE反应器框架简介反应器(Reactor):用于事件多路分离和分派的体系结构模式通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞与非阻塞。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止。而对于非阻塞状态, 如果没有东西可读, 或者不可写, 读写函数马上返原创 2012-02-16 23:59:02 · 1918 阅读 · 0 评论 -
ACE前摄器Proactor模式
当 OS 平台支持异步操作时,一种高效而方便的实现高性能 Web 服务器的方法是使用前摄式事件分派。使用前摄式事件分派模型设计的 Web 服务器通过一或多个线程控制来处理异步操作的完成。这样,通过集成完成事件多路分离(completion event demultiplexing)和事件处理器分派,前摄器模式简化了异步的 Web 服务器。异步的 Web 服务器将这样来利用前摄器模式:首先让原创 2012-02-16 23:53:44 · 1911 阅读 · 0 评论 -
TCP长连接与短连接的区别
1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:(#add,“握手”即图中左边到右边的连线)经典的四次握手关闭图:原创 2012-02-01 14:59:52 · 4367 阅读 · 0 评论 -
TCP三次握手四次挥手详解
经典的三次握手示意图:(#add,“握手”即图中左边到右边的连线)经典的四次握手关闭图:TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送)FIN(finish结束)原创 2012-02-01 16:54:22 · 5929 阅读 · 0 评论 -
windows进程间通信
摘 要: 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能给读者选择通信方法提供参考。关键词 进程 进程通信 IPC Win32 API原创 2011-12-27 09:56:31 · 28471 阅读 · 3 评论 -
c++多线程编程安全性简单说明
对于多线程编程,很多人概念不清,写代码的时候要么是处处加锁,影响性能不说,还容易莫名其妙的死锁,还有人对多线程敬而远之。所以学习多线程编程最重要的不是学习API,而是理解什么才是多线程安全的代码从例子说起#include windows.h>#include process.h>long global1 = 0;volatile long global2 =原创 2012-04-19 00:36:23 · 2480 阅读 · 3 评论 -
HTTP POST GET详解
一 原理区别 一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交。Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETEURL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,原创 2012-06-12 18:00:18 · 1413 阅读 · 0 评论 -
广播通信
广播通信代码框架:1. 协议都是:[python] view plaincopyprint?SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0); 2. 服务端设置选项[python] view plaincopyprint?原创 2012-07-08 19:35:15 · 1697 阅读 · 0 评论 -
集群式游戏服务器架构方案设计开发
自从2003年开发VOIP Radius Server以及修改Gnugk以来,从事服务器开发已经近五年了,对服务器开发也有一些自己独到的看法以及见解。当摆脱了技术本身的束缚之后,才理解重要的并不是某种技术的运用,而是整体设计的考虑,也慢慢明白了设计是开发的灵魂的道理。从技术层面来看,各个平台都有一些自己特有的东西,比如Windows 平台下面的IOCP技术,可以说为了支持大的并发,IOCP原创 2012-08-06 23:44:38 · 1967 阅读 · 0 评论 -
纤程
纤程(Fiber),是微软加入到Windows中,使得UNIX服务器应用程序更好地移植到Windows中。所以本篇真正没有多少应用价值,只是为了使得笔记更加完整。 看完本章,感觉纤程是比线程的更小的一个运行单位。可以把一个线程拆分成多个纤程,然后通过人工转换纤程,从而让各个纤程工作。 要知道的是人工的转换,不是系统自动切换。因为线程的实现通过Windows内核完成的,因此Windo原创 2012-07-23 22:40:30 · 3382 阅读 · 2 评论 -
协程的C实现
今天正好跟ownwaterloo聊到协程,于是查了查资料,顺便写个博客记录一下吧。我主要参考的是这篇资料http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html,是Simon Tatham提出的一个协程的C实现,非常有意思。协程的思想主要是为了解决多个任务如何分享CPU这个问题的。线程在很多协作问题上处理的不好,而且需要原创 2012-07-23 23:04:49 · 3328 阅读 · 0 评论 -
最轻量级的C协程库:Protothreads
协程的好处不用再多说,作为与函数调用/返回相对的概念,它使我们思考问题的方式经历一场变革。现在我们关注的是C,由于C本身的特质,将协程引入其中将会是一 个挑战。无数先驱已经为这个目标抛了头颅洒了热血,于是我们有了libtask之类。而这里提到的,是一个堪称最轻量级的协程实现:Protothreads(主页:http://www.sics.se/~adam/pt/)。所谓最轻量级,就是说,功能已经不原创 2012-07-23 23:52:31 · 6059 阅读 · 1 评论 -
百万用户级游戏服务器架构设计
服务器结构探讨 -- 最简单的结构 所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及可维护性也有更大的帮助。 好的结构不是一蹴而就的,而且每个设计者心中的那把尺都不相同,所以这个优秀结构的定义也就没有定论。在这里,我们不打算对现有游戏结构做评价,而是试着从头开始搭建一个我们需要原创 2012-07-23 11:49:53 · 3764 阅读 · 2 评论 -
详谈高性能TCP服务器开发
对于开发一款高性能服务器程序,广大服务器开发人员在一直为之奋斗和努力.其中一个影响服务器的重要瓶颈就是服务器的网络处理模块.如果一款服务器程序不能及时的处理用户的数据.则服务器的上层业务逻辑再高效也是徒劳.所以一个服务器程序的网络处理能力直接影响到整个服务器的性能, 本文主要介绍在windows平台下开发高性能的网络处理模块以及自己在设计开发服务器网络模块遇到的一些问题和开发心得.本篇原创 2012-08-07 00:04:52 · 2228 阅读 · 0 评论 -
多线程服务器的常用编程模型
本文主要讲我个人在多线程开发方面的一些粗浅经验。总结了一两种常用的线程模型,归纳了进程间通讯与线程同步的最佳实践,以期用简单规范的方式开发多线程程序。文中的“多线程服务器”是指运行在 Linux 操作系统上的独占式网络应用程序。硬件平台为 Intel x64 系列的多核 CPU,单路或双路 SMP 服务器(每台机器一共拥有四个核或八个核,十几 GB 内存),机器之间用百兆或千兆以太网连接。原创 2012-07-29 19:52:28 · 3063 阅读 · 0 评论 -
POSIX 多线程程序设计
Blaise Barney, Lawrence Livermore National Laboratory 目录表 摘要 译者序Pthreads 概述 什么是线程? 什么是Pthreads? 为什么使用Pthreads? 使用线程设计程序 Pthreads API编译多线程程序 线程管理 创建和终止线程 向线程传递参数 连接(Joining)和原创 2012-07-27 21:10:37 · 1816 阅读 · 0 评论 -
Mutex的lock(), tryLock()区别
lock函数和tryLock函数都是用于锁定对象,但他们之间有一定的区别:lock函数是阻塞的,因为它调用WaitForSingleObject函数时传递的第二个参数是INFINITE,表示无限等待下去,所以是阻塞的。tryLock函数时非阻塞的,调用后立即返回。因为它调用WaitForSingleObject函数时传递的第二个参数是0,表示不等待,立即返回。调用lock或者t原创 2012-09-03 17:17:18 · 9080 阅读 · 3 评论 -
cmwap和cmnet的区别
很多人都知道这是中国移动提供的两个不同的接入点,但是说到区别,恐怕很多玩家都不是十分清楚。其实,CMWAP 和 CMNET 只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。它们在实现方式上并没有任何差别,但因为定位不同,所以和CMNET相比,CMWAP便有了部分限制,资费上也存在差别。原创 2012-11-23 18:35:23 · 1716 阅读 · 0 评论 -
Discussion about Condition Variable
1.1 什么是条件变量和条件等待?简单的说:条件变量(condition variable)是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待某个条件为真,而将自己挂起;另一个线程使得条件成立,并通知等待的线程继续。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。 Wiki中的定义如下:Conceptually a conditio原创 2012-12-21 19:07:15 · 1544 阅读 · 0 评论 -
网游服务器通信架构的设计
随着网游从业者的规模和需求不断扩大,越来越多的朋友进入了网游开发这个领域,使得市场中网游开发技术相关的需求量迅猛增长。目前,网游行业比较紧缺的是具有较深技术功底的“专家型”开发者,这主要包括两个方面:服务器端设计人员以及客户端设计人员。对于网络游戏而言,由于其主要的游戏逻辑计算是在服务器端完成的,数据同步与广播信息的传递也是通过服务器完成的,所以,是否拥有一个有经验的服务器端设计人员已经成为一款网原创 2013-01-29 22:38:29 · 2309 阅读 · 0 评论 -
四种进程或线程同步互斥的控制方法
1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件: 用来通知线程有一些事件已发生,从而启动后继任务的开始。 一,临界区(Critical Section): 保证在某一时刻只有一个线程能访问数据的原创 2010-01-12 15:21:00 · 1848 阅读 · 0 评论 -
Beginner's introductory guide to writing, installing, starting, stopping NT services
Introduction to NT ServicesAt system boot, Windows NT/2K starts an RPC server called as the Service Control Manager (SCM). An NT service is basically a win32 program that is loaded by the SCM. The原创 2013-03-04 23:06:37 · 1075 阅读 · 0 评论 -
同步/异步与阻塞/非阻塞的区别
我喜欢用自己的语言通过联系现实生活中的一些现象解释一些概念,当我能做到这一点时,说明我已经理解了这个概念.今天要解释的概念是:同步/异步与阻塞/非阻塞的区别.这两组概念常常让人迷惑,因为它们都是涉及到IO处理,同时又有着一些相类似的地方.首先来解释同步和异步的概念,这两个概念与消息的通知机制有关.举个例子,比如我去银行办理业务,可能选择排队等候,也可能取一个小纸条上面有我的原创 2013-03-05 22:50:58 · 1392 阅读 · 0 评论 -
学之者生,用之者死——ACE历史与简评
首先谈一点,代码风格,ACE所谓的开创了一个极坏的命名风格,其一class命名 既非pascal命名法,也非小驼峰,更不是linux命名风格,而是将这些杂凑起来,函数名又使用linux中下划线风格,看起来相当蛋疼,带坏了少部分程序员跟着这么干;其二是成员变量用下划线后缀命名,又带坏了一批人,通常有m_前缀,或_前缀的,完全没必要标新立异,好的风格也就两三种,并且相当合理,没必要自创原创 2013-02-28 16:00:52 · 1821 阅读 · 0 评论 -
轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统
原文地址:www.devmaster.net/articles/mmo-scalable-server/原文作者:Joel Reymont译文地址:blog.mylkcn.net/senzung.php翻译作者:神宗冥浩简介:本文以我的OpenPoker项目为例介绍另一种构建大规模多人在线系统的方案。OpenPoker是一个大型多人扑克网游,内建支持了容错能原创 2013-03-29 12:31:38 · 2117 阅读 · 0 评论 -
一个简单的游戏服务器框架
最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。第一部分 服务器逻辑服务器这边简单的分为三个部分,客户端的连接首先到达网关服务器,网关这里有个线程用来监听来自与客户端的连接,然后在将这些数据发送到游戏逻辑服务器上,这个逻辑游戏服务器上,数据的交互就是通过与数据服务器进原创 2013-04-07 12:27:17 · 4606 阅读 · 1 评论