
网络编程
文章平均质量分 92
yuyin86
这个作者很懒,什么都没留下…
展开
-
Windows Socket五种I/O模型——代码全攻略
<br />如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了选择(Select)、异步选择 (WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确,而且综合考虑到程序的扩展性和可移植性等因 素,作出自己的选择。<br />我会以一个回应反射式服务器(与《Wi转载 2010-09-17 15:43:00 · 637 阅读 · 0 评论 -
C++网络开发包ACE环境的配置与调试
ACE是个很有用的开放源代码的C++网络编程开发包,利用它比直接用API更有利于代码的健壮性,可移植性,并相对简单。估计大家刚接触ACE时,都有一定难度,说不定就半途放弃了,这是我学ACE两天中的总结,基本上不成文,但我想研究到ACE的你一定会明白下文的意思。我的系统环境转载 2011-09-14 06:52:55 · 753 阅读 · 0 评论 -
C++ Boost Thread 编程指南
0 前言 标准C++线程即将到来。CUJ预言它将衍生自Boost线程库,现在就由Bill带领我们探索一下Boost线程库。 就在几年前,用多线程执行程序还是一件非比寻常的事。然而今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率;为了达到最大的吞吐量,事务转载 2011-09-14 06:50:34 · 847 阅读 · 0 评论 -
Linux网络编程 -- select/epoll得知socket有数据可读,如何判断数据全部被读取完毕?
补充一点:只有在使用epoll ET(Edge Trigger)模式的时候,才需要关注数据是否读取完毕了。使用select或者epoll的LT模式,其实根本不用关注数据是否读完了,select/epoll检测到有数据可读去读就OK了。 这里有两种做法: 1. 针对TCP,调用recv方法,根据recv方法的返回值,如果返回值小于我们指定的recv buffer的大小,则认为数据已经转载 2011-12-20 09:32:38 · 1423 阅读 · 0 评论 -
Linux下socket(select,epoll)
1. Linuxsocket的简介在linux支持select模式,poll模式,在内核2.6版本以后支持epoll模式;epoll模式的优点: A:支持进程打开的最大socket数据 B:IO效率不随FD数目增加而线性下降 C:使用mmap加速内核与用户空间的消息传递。 D:内核微调 2. socket的属性(例如:设置为非阻塞模式) 1: /转载 2011-12-20 09:41:21 · 2375 阅读 · 1 评论 -
linux中select()函数分析
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式转载 2011-12-20 09:14:39 · 470 阅读 · 0 评论 -
多线程服务器的常用编程模型
这篇文章原本是前一篇博客《多线程服务器的常用编程模型》(以下简称《常用模型》)计划中的一节,今天终于写完了。“服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启,而是程序不会因为无事可做而退出,它会等着下一个请求的到来。例如 wget转载 2011-12-20 09:33:32 · 794 阅读 · 0 评论 -
socket 编程入门教程(三)TCP原理:7、TCP连接的关闭
TCP连接一旦建立,服务器端和客户端就成为了对等关系,任何一方都可以发出关闭握手请求,甚至可以同时发出关闭握手请求。TCP的连接建立需要3次握手,而正常关闭则需要4次握手。1、主动关闭的一方A调用close(),SendQ不再接收send()写入信息,在SendQ队列的最后,向被动关闭的一方发送TCP的IP数据报作为关闭握手的请求。这个数据报中包含着标志FIN,也包含着此刻的字节序号m。2转载 2012-02-13 10:52:00 · 729 阅读 · 0 评论 -
IPv4组播通信原理
摘自网络,感谢原作者摘要:本文试图成为学习TCP/IP网络组播技术的入门材料。文中介绍了组播通信的概念及原理,以及用于组播应用编程的Linux API的详细资料。为了使读者更加完整的了解Linux 组播的整体概念,文中对实现该技术的核心函数也做了介绍。在文章的最后给出了一个简单的C语言套接字编程例子,说明如何创建组播应用程序。一、导言在网络中,主机间可以用三种不同的地址进行通信:转载 2012-02-25 09:42:32 · 3744 阅读 · 0 评论 -
socket编程原理
1 问题的引入 UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O操作的进程。然后这个用户进程多次调用“读/写”以传输数据。当所有的传输操作完成转载 2012-02-25 09:44:25 · 635 阅读 · 0 评论 -
Socket编程中的select多路复用
Socket编程中的select多路复用阻塞方式(block),顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,假如事件没有发生,进程或线程就被阻塞,函数不能立即返回。非阻塞方式(non-block),就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,假如事件发生则和阻塞方式相同,若事件没有发生则返回一个代码来告知事件转载 2012-02-20 15:08:04 · 1104 阅读 · 1 评论 -
Linux下基于socket多线程并发通信的实现
/**************************************************** 文件名:pthread_server.c* 文件描述:创建子线程来接收客户端的数据***************************************************/#include #include #include #include转载 2012-02-20 15:05:41 · 932 阅读 · 0 评论 -
Windows Socket I/O模型以及Linux Epoll模型的有关资料
本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教。一:select模型 二:WSAAsyncSelect模型 三:WSAEventSelect模型 四:Overlapped I/O 事件通知模型 五:Overlapped I/O 完成例程模型 六:IOCP模型 老转载 2012-03-02 13:39:37 · 568 阅读 · 0 评论 -
(unix domain socket)使用udp发送>=128K的消息会报ENOBUFS的错误
1、Unix domain socket简介unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API于在不同主机上执行客户/服务器通信所有的API(套接字API,如AF_INET、AF_INET6等类型的API)相同。unix域协议可以视为是进程之间本地通信IPC的一种。unix域提供两类套接口:字节流套接口(类似TCP)和数据报套接口(类似UDP)转载 2012-03-02 17:01:09 · 820 阅读 · 0 评论 -
采用C++的ACE库实现的一个通用的C/S架构通信程序
http://www.wangchao.net.cn/bbsdetail_148537.html ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。ACE 提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,转载 2012-03-07 09:42:23 · 647 阅读 · 0 评论 -
ACE的构建(VC++6.0环境)[转]
ACE的构建(VC++6.0环境)Windows下ACE的构建1. 将ACE-5.5.zip解压到所需的安装目录,此处以E:\为例,解压后形成ACE_wrappers文件夹,因此ACE将会存在于ACE_wrappers\ace目录中。ACE_ROOT=E:\ACE_wrappers。2. 在系统中新建ACE_ROOT环境变量,值设为 E:\ACE_wrappers。具体设置为:我的电脑转载 2012-03-07 09:57:39 · 536 阅读 · 0 评论 -
RTP:实时应用程序传输协议 中文版
RFC3550 RTP:实时应用程序传输协议 摘要本文描述RTP(real-time transport protocol),实时传输协议。RTP在多点传送(多播)或单点传送(单播)的网络服务上,提供端对端的网络传输功能,适合应用程序传输实时数据,如:音频,视频或者仿真数据。RTP没有为实时服务提供资源预留的功能,也不能保证QoS(服务质量)。数据传输功能由一个控制协议(RTC转载 2012-03-25 13:51:24 · 1599 阅读 · 0 评论 -
ACE 的陷阱
坦白说,使用这个标题无非是希望能够吸引你的眼球 , 这篇文章的目的仅仅是为了揭示一些 ACE 缺陷的。文章适合的读者是对 ACE ( ADAPTIVE Communication Environment )有一定研究,或者正在使用 ACE 从事项目开发的人士参考。如果你对C++ 还是新手,甚至包括 ACE 知识初学者,(但你想飞的更高),建议你收藏这篇文档以后阅读。秉承陷阱系列文章的传统,转载 2012-03-12 10:34:33 · 725 阅读 · 0 评论 -
Linux 下ACE的构建
Linux 下ACE的构建1. 设置环境变量ACE_ROOT,命令如下:“vi /etc/profile” ,在“export PATH USER….”后加入4行 ACE_ROOT=/opt/ACE export ACE_ROOT LD_LIBRARY_PATH=$ACE_ROOT/aceLD_LIBRARY_PATH export LD_LIBRARY_PAT转载 2012-03-29 14:05:36 · 935 阅读 · 0 评论 -
高性能服务器软件开发
说明:本篇文章仅用于个人收藏,同时欢迎大家讨论;无法获取原作者的资料,在此表示抱歉。 这是正在写的一本书的大纲,先发出来,大家提点意见 高性能服务器软件开发 关于这本书的简单介绍:注意,在这里我们讨论的高性能服务器软件设计并不是通常意义上的高性能Web程序设计,比如说在J2EE、.NET框架下如何使用线程池提高性能,如何优化ASP,PHP程序,或者如何调整Ap转载 2012-03-14 13:40:15 · 537 阅读 · 0 评论 -
高性能服务器开发(不断更新)
高性能服务器必须考虑的4个方面:1 数据拷贝2 内存管理3 进程/线程上下文切换4 锁争用说明:以下文章中会包含一些研究服务器性能的链接,这些链接也是非常重要的文档,本文不再列出,查看下面的文章内容时,可点击文章里面的链接访问。影响服务器性能的TCP选项:TCP_CORK,TCP_NODELAYhttp://bbs.net130.com/showthread.php转载 2012-03-14 13:16:08 · 2662 阅读 · 2 评论 -
高性能服务器底层网络通信模块的设计方法
高性能服务器底层网络通信模块的设计方法在对I/O完成端口进行底层封装的基础上,本文提出一种具有高性能的、可扩展性的通用网络通信模块设计方案。该方案采用多种系统性能优化技术,如线程池、对象池和环形缓存区等。该模块在Win32平台上用c++开发完成,经过严格的压力和性能测试后,实验结果表明该模块能够支持海量并发连接,具有较高的数据吞吐量,在实际项目应用中也取得了良好的表现。转载 2012-03-14 13:17:07 · 913 阅读 · 0 评论 -
libevent事件处理框架分析
这两天大致看了看libevent的代码,简单做一个分析.libevent最大的特点就是封装了对以下三种事件的响应:IO事件,定时器事件,信号事件.这里就分析libevent如果做到这一点的,在libevent中还包括一些其他的功能(如缓冲区),但是我这里就重点讲解这一部分了.事件原型,简单看一看用于封装事件的结构体定义:Code highlighting produ转载 2012-03-14 13:17:48 · 646 阅读 · 0 评论 -
protobuf+RPC的几个C++实现
1. RCF: 纯c++的RPC, 不引入IDL, 大量用到boost,比较强大.2. casocklib: protobuf + asio 较完善实现3. eventrpc: protobuf + libevent 较完善实现4. evproto: protobuf + libevent 简单实现5. febird:同样无IDL的c++ RPC,自己实现了串行化和网络IO.转载 2012-03-14 13:19:57 · 1532 阅读 · 0 评论 -
高性能服务器的资源和相关站点
本文作者: 金蜗牛Goldou 本文出处:http://blog.youkuaiyun.com/goldou声 明: 本文可以不经作者同意, 任意复制, 转载, 但任何对本文的引用都请保留文章的作者, 出处以及声明信息. 谢谢! 引子最近由于自己参与的项目和毕业论文的关系,正在研究高性能服务器方面的编程。服务器网络层使用中转载 2012-03-14 13:42:08 · 663 阅读 · 0 评论 -
关于编写高性能服务器的资料汇总(Linux)
这端时间为了写我自己的GSyncer,一直在研究分布式存储和服务器编写这两方面。关于网络编程,Stenvens先生的UNP3自然是必读的,而且在30章还介绍了各种server模型。但是这本书毕竟有点年代了(如果stenvens还在世该多好),有些想法免不了的会显得陈旧,而且因为整本书面向UNIX,一些Linux在网络方面的新特性没有涉及(比如epoll,零拷贝等)。所以光看书是不够的,必要的时转载 2012-03-14 18:04:49 · 736 阅读 · 1 评论 -
跨平台的网络通信中间件:ICE和ACE
二十世纪九十年代中期以来,业界一直在使用DCOM和CORBA这样的面向对象的中间件平台。在分布式的应用中,中间件平台托管了大部分网络事务,比如对数据进行编码与解码以进行传送,把逻辑对象地址映射到物理传输端点,根据客户和服务器的机器架构改变数据的表示,以及按照需要自动启动服务器。DCOM和CORBA由于自身的缺点,都没有成功占领大部分分布式计算的市场。DCOM是Microsoft的独家解决方转载 2012-03-14 21:54:43 · 719 阅读 · 0 评论 -
高性能服务器的多线程策略
(一)线程数量与线程池模型 参见:high-performance server design.http://pl.atyp.us/content/tech/servers.html 频繁的上下文切换,会导致系统性能严重下降,而产生过多的切换大致有两个原因: 1)过多的线程数量。这会使系统性能呈指数级的下降。对于每连接一个线程的系统而言,这也是为什么性能会变差的原因。一个转载 2012-03-14 18:05:12 · 679 阅读 · 0 评论 -
使用Linux raw socket时需要注意的一些问题
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 一般情况下,我们使用raw socket都是用于发送icmp包或者自己定义的包。最近我想用raw转载 2012-04-25 21:00:56 · 1375 阅读 · 1 评论 -
SOCKET API和TCP STATE的对应关系_三次握手(listen,accept,connect)_四次挥手close及TCP延迟确认(调用一次setsockopt函数,设置TCP_QUICK
我们学习网络基础时,传输层的协议有TCP和UDP;在Linux网络编程中,我们使用socket API,实现网络通信。那么: socket API 和 TCP 协议中各个状态是如何对应的呢?我们可以通过下图来看: 在socket系统调用中,如何完成三次握手和四次挥手: SOCK_DGRAM,即UDP中的connect操作知转载 2012-04-25 21:02:39 · 1246 阅读 · 0 评论 -
多线程服务器的适用场合
多线程服务器的适用场合 这篇文章原本是前一篇博客《多线程服务器的常用编程模型》(以下简称《常用模型》)计划中的一节,今天终于写完了。“服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启,而是程序不会因为无事可做而退出,它会等着下转载 2012-05-02 00:21:55 · 838 阅读 · 0 评论 -
TCP/IP通信程序设计的丰富多样性
刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程 序,据此一些人可能会认为TCP/IP编程很简单。其实不然, TCP/IP编程具有较为丰富的内容。其编程的丰富性主要体现在 通信方式和报文格式的多样性上。 一。通信方式 主要有以下三大类: (一)SERVER/CLIENT方式 1.一个Client方连接一个Server转载 2012-05-06 14:40:09 · 450 阅读 · 0 评论 -
Linux中用socket 传输视频
由于socket在传输时,是对socket文件描述符进行写和读,所以在发送端只需把要保存到文件中的数据写进socket文件里,在接收端只需从socket文件中读去数据就行了。流程如下:接收端:(server)创建socket->listen->accept->read(recv)-> decode->display发送端: (client)创建socket->connect->ca转载 2012-05-12 18:16:37 · 4146 阅读 · 1 评论 -
linux中用socket双向传输声音
要解决linux中音频编程的问题。linux中关于音频的API有OSS和ALSA。有的声卡是用OSS写的驱动,有的是ALSA驱动,具体还得看机器的实际情况。OSS是指open sound system,属于unix比较老的声卡驱动标准,而且是不完全开放源代码的商业产品。ALSA是指Advanced Linux Sound Architecture则是比较新,代表了Linux未来的主流。而且完全开放转载 2012-05-12 18:18:59 · 2161 阅读 · 0 评论 -
RPC远程过程调用实例剖析
RPC远程过程调用实例剖析(转载) 本文比较详细地介绍了远程过程调用(RPC)的OSF标准在Microsoft VC++中的实现原理,以及如何使用它们来开发应用程序. 阅读本文你将了解RPC的基本原理,并将看到如何开发使用RPC进行异种机网络分布式处理的客户机应用程序和服务器应用程序. Para 1. RPC工作原理RPC是把传统本地过程调用的概念加以扩充后引入分布转载 2012-06-19 09:46:27 · 1254 阅读 · 0 评论 -
RPC、RMI与MOM与组播 通信原理
远程过程调用(RPC):即对远程站点机上的过程进行调用。当站点机A上的一个进程调用另一个站点机上的过程时,A上的调用进程挂起,B上的被调用过程执行,并将结果返回给调用进程,使调用进程继续执行【B上的被调用过程的参数和执行结果在调用和被调用进程之间是通过消息传递来实现的,表现为C/S关系】为实现不同站点机上的RPC,调用和被调用进程各方都要保留一个用于存放过程参数和执行结果的运行栈,分别称为转载 2012-06-19 09:41:22 · 1157 阅读 · 0 评论 -
Http与RPC通信协议的 比较
上图是OSI网络结构的七层模型。各层的具体描述如下: 第七层:应用层 定义了用于在网络中进行通信和数据传输的接口 - 用户程式;提供标准服务,比如虚拟终端、文件以及任务的传输 和处理; 第六层:表示层 掩盖不同系统间的数据格式的不同性; 指定独立结构的数据传输格式; 数据的编码和解码;加密和解密;压缩和 解压缩 第五层:会话层 管理用户会话和对转载 2012-06-19 09:42:24 · 895 阅读 · 0 评论 -
RPC原理,应用开发
这学期学习中间件,其实我不知道什么是中间件,于是就学习了。定义:中间件(Middleware)是一种软件,处于系统软件(操作系统和网络软件)与应用软件之间,它能使应用软件之间进行跨网络的协同工作(也就是互操作) 第一次实验真正呢个接触到了RPC,,但是,它到底是什么东西呢?RPC:远程过程调用协议(RPC:Remote Procedure Call protocol)远程过转载 2012-06-19 09:53:24 · 1377 阅读 · 0 评论 -
转载一篇开源http服务器(C语言)
介绍Tokyo Cabinet、Tokyo Tyrant和Tokyo Dystopia1、micro_httpd - really small HTTP server特点: 支持安全的 .. 上级目录过滤 支持通用的MIME类型 支持简单的目录 支持目录列表 支持使用 index.html 作为首页 Trailing-slas转载 2012-07-09 11:15:27 · 2237 阅读 · 0 评论 -
使用事件驱动模型实现高效稳定的网络服务器程序【写得比较基础详细】
前言事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在 高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥转载 2012-07-09 11:16:38 · 1029 阅读 · 0 评论