
网络编程
GoRustNeverStop
这个作者很懒,什么都没留下…
展开
-
linux中的epoll机制
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明: #define原创 2015-04-11 15:01:56 · 922 阅读 · 0 评论 -
getaddrinfo简单应用——取得IP地址
getaddrinfo提供独立于协议的名称解析函数原型: #include sys/types.h> #include sys/socket.h> #include netdb.h> int getaddrinfo(const char *node, const char *service,转载 2016-07-09 13:05:52 · 10455 阅读 · 1 评论 -
高性能网络编程1----accept建立连接
最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心通讯细节。他们更喜欢在OO世界里,去实现某个接口、实现这个组件预定义的各种模式、设置组件参数来达转载 2016-08-08 00:08:47 · 984 阅读 · 0 评论 -
高性能网络编程2----TCP消息的发送
在上一篇中,我们已经建立好的TCP连接,对应着操作系统分配的1个套接字。操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送方法成功返回时,能保证TCP另一端的主机接收到吗?能保证数据已经发送到网络上了吗?套接字为阻塞或者非阻塞时,发送方法做的事情有何不转载 2016-08-08 00:10:35 · 462 阅读 · 0 评论 -
高性能网络编程3----TCP消息的接收
这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动。为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读:1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的?2、若socket为默认的阻塞套接字,此时recv方法传入的len参数,是表示必须超时转载 2016-08-08 00:11:38 · 679 阅读 · 0 评论 -
高性能网络编程4--TCP连接的关闭
TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。为方便阅读,我们可以带着以下5个问题来阅读本文:1、当socket被多进程或者多线程共享时,关闭连接时有何区别?2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理?3、关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎么处理?4、so_l转载 2016-08-08 00:12:43 · 461 阅读 · 0 评论 -
高性能网络编程5--IO复用与并发编程
对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒没有收发任何报文的相对不活跃连接。同时处理多个并行发生事件的连接,简称为并发;同时处理万计、十万计的连接,则是高并发。服务器的并发编程所追求的就是处理的并发连接数目无限大,同时维持着高效率使用CPU等资源,直至物理资源首先耗尽。转载 2016-08-08 00:13:24 · 583 阅读 · 0 评论 -
高性能网络编程6--reactor反应堆与定时器管理
反应堆开发模型被绝大多数高性能服务器所选择,上一篇所介绍的IO多路复用是它的实现基础。定时触发功能通常是服务器必备组件,反应堆模型往往还不得不将定时器的管理囊括在内。本篇将介绍反应堆模型的特点和用法。首先我们要谈谈,网络编程界为什么需要反应堆?有了IO复用,有了epoll,我们已经可以使服务器并发几十万连接的同时,维持高TPS了,难道这还不够吗?我的答案是,技术层面足够了,但在软件转载 2016-08-08 00:14:01 · 446 阅读 · 0 评论 -
高性能网络编程7--tcp连接的内存使用
当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突、概念模糊的感觉,如下(sysctl -a命令可以查看这些配置):[cpp]转载 2016-08-08 00:14:50 · 939 阅读 · 0 评论 -
linux send与recv函数
linux send与recv函数详解1 #include 2 ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);3 ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);recv 和send的前3个参数转载 2016-10-25 14:21:13 · 460 阅读 · 0 评论 -
accept成功后获取客户端ip
#include #include .........struct sockaddr_in sa;int len;.........len = sizeof(sa);if(!getpeername(sockconn, (struct sockaddr *)&sa, &len)){memset(sql,0,1024);s转载 2016-10-28 15:33:07 · 10016 阅读 · 0 评论 -
getsockname函数与getpeername函数的使用
getsockname和getpeername函数getsockname函数用于获取与某个套接字关联的本地协议地址 getpeername函数用于获取与某个套接字关联的外地协议地址定义如下:#includeint getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);int g转载 2016-10-28 15:37:56 · 758 阅读 · 0 评论 -
linux下C语言socket网络编程简例
这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端;客户端在接受到数据后打印出来,然后关闭。程序里有详细的说明,其中对具体的结构体和函数的实现可以参考其他资料。程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的。移植时转载 2016-06-20 09:14:25 · 645 阅读 · 0 评论 -
TCP/IP网络编程之四书五经
TCP/IP协议是当前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要。从应用上来说,现在直接利用C层次Socket API进行TCP/IP编程的人确实越来越少了,各种现成的框架(如ACE、Java、.NET FCL)和控件(如IP*Works)大大简化了TCP/IP编程的难度。但是,如果想要在这个领域达到融会贯通的地步,不打下坚实的基础是不可想象的。正如Richard S转载 2016-06-18 22:19:35 · 2400 阅读 · 0 评论 -
getsockname函数与getpeername函数的使用
getsockname和getpeername函数getsockname函数用于获取与某个套接字关联的本地协议地址 getpeername函数用于获取与某个套接字关联的外地协议地址定义如下:#includeint getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);int g转载 2016-06-16 10:41:59 · 5706 阅读 · 0 评论 -
select、poll、epoll使用小结
Linux上可以使用不同的I/O模型,我们可以通过下图了解常用的I/O模型:同步和异步模型,以及阻塞和非阻塞模型,本文主要分析其中的异步阻塞模型。一、select使用这个模型中配置的是非阻塞I/O,然后使用阻塞select系统调用来确定一个I/O描述符何时有操作。使用select调用可以为多个描述符提供通知,对于每个提示符,我们可以请求描述符的可写,可读以及是否发生错误转载 2016-01-07 22:40:08 · 650 阅读 · 0 评论 -
常见的网络编程面试题
1:tcp和udp的区别TCP:是面向连接的流传输控制协议,具有高可靠性,确保传输数据的正确性,有验证重发机制,因此不会出现丢失或乱序。UDP:是无连接的数据报服务,不对数据报进行检查与修改,无须等待对方的应答,会出现分组丢失、重复、乱序,但具有较好的实时性,UDP段结构比TCP的段结构简单,因此网络开销也小。2:流量控制和拥塞控制拥塞控制网络拥塞现象是转载 2015-12-27 18:57:53 · 38230 阅读 · 2 评论 -
几种经典的网络服务器架构模型的分析与比较
前言事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接 数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文转载 2016-04-14 19:44:19 · 588 阅读 · 0 评论 -
领导者-追随者模型介绍
领导者-追随者模型介绍这几天翻了些文章,发现对领导者/追随者模型说的比较少,下面就这个模型打个比方:话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。一般就是有一个山贼在山路口察看,其他人在林子里面睡觉。假如发现有落单的过往客商,望风的山贼就会弄醒一个睡觉的山贼,然后自己去打劫。醒来的山贼接替作望风的事情。打劫的山贼搞定以后,就会去睡觉,直到被其他望风的山贼叫醒来望转载 2016-04-14 19:45:36 · 3021 阅读 · 0 评论 -
epoll网络编程实例
在前面已经经过了PPC、TPC、select之类( TPC就是使用进程处理data,TPC就是使用线程处理 ),前面两个的缺点大家应该都是知道的是吧,对于select( 其实poll和他差不多 ),缺点是能同时连接的fd是在是不多,在linux中一般是1024/2048,对于很大的服务器来说是不够的!当然我们可以自己修改其值!但是效率上就会下降! 对于改进poll的epoll来转载 2016-04-14 20:42:44 · 782 阅读 · 0 评论 -
Linux进程间通信——使用共享内存
下面将讲解进程间通信的另一种方式,使用共享内存。一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一转载 2016-05-31 21:17:22 · 1200 阅读 · 0 评论 -
linux socket编程之socket()函数介绍
socket函数是任何套接口网络编程中第一个使用的函数,它向用户提供一个套接字,即套接口描述文件字,它是一个整数,如同文件描述符一样,是内核标识一个IO结构的索引。通过socket函数,我们指定一个套接口的协议相关的属性,为进行使用socket api做好准备。如同所有的介绍API的文档一样,我们先给出socket函数的原型:#includeint转载 2016-06-02 18:47:10 · 1603 阅读 · 0 评论 -
socket系列函数
SOCKET()我们使用系统调用socket()来获得文件描述符:#include#includeint socket(int domain,int type,int protocol);第一个参数domain设置为“AF_INET”。第二个参数是套接口的类型:SOCK_STREAM或SOCK_DGRAM。第三个参数设置为0。系统调用socket()只返回一个套转载 2016-06-02 20:57:50 · 481 阅读 · 0 评论 -
send和recv函数解析(转)
转自:http://blog.youkuaiyun.com/gogor/archive/2010/09/20/5896931.aspx1. send函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户端还是服务器端应用程序都用send函数来向TCP连接的另一端发送数据。客户端程序一般用se转载 2016-06-12 09:07:53 · 788 阅读 · 0 评论 -
网络编程中需要考虑的一些情况
网络编程中需要考虑的一些情况 【摘要】本文主要说明了一些网络编程需要考虑的一些情况。【关键词】网络编程一、问题的提出在网络编程中,经常有些情况没有考虑,这就对系统带来了隐患,所以需要列出一些需要考虑的一些情况。二、解决思路/**************服务器*******************************/int main(){转载 2016-06-12 09:08:30 · 711 阅读 · 0 评论 -
超简单的windows发包工具—小兵以太网测试仪
小兵以太网测试仪 是一款windows平台下的发包工具。该软件小巧、易用、开源、免费。该软件的功能有:各种常见报文(包括arp ip icmp udp tcp等)的编辑与发送发包速率控制抓包对抓到的包进行修改编辑及发送将报文导出为tcpdump/ethereal/wireshark存档(pcap格式)从tcpdump/ethereal/wireshark存档导入报文转载 2016-06-15 17:50:49 · 13284 阅读 · 0 评论 -
几个常见的 Socket 连接错误及原因[转]
下面列出了几个在客户与服务进程连接中常见的几个 Socket 错误,并分析了原因。后续再逐渐补充吧。ECONNABORTED 该错误被描述为“software caused connection abort”,即“软件引起的连接中止”。原因在于当服务和客户进程在完成用于 TCP 连接的“三次握手”后,客户 TCP 却发送了一个 RST (复位)分节,在服务进程看来转载 2017-01-10 10:04:59 · 12651 阅读 · 0 评论