Linux: socket编程
文章平均质量分 87
北雨南萍
长期专注于实时音视频通信技术、音视频处理技术,包括基于webrtc的音视频通信解决方案,基于ffmpeg的媒体处理解决方案。
展开
-
1.1.4 网络编程:Reactor与Proactor的概念与应用
1、标准定义在分布式系统尤其是服务器这一类事件驱动应用中,虽然这些请求最终会被序列化地处理,但是必须时刻准备着处理多个同时到来的服务请求。在实际应用中,这些请求总是通过一个事件(如CONNECTOR、READ、WRITE等)来表示的。在有 序地处理这些服务请求之前,应用程序必须先分离和调度这些同时到达的事件。为了有效地解决这个问题,我们需要做到以下4方面:> 为了提高系统的可测量性和反应时间,应用程序不能长时间阻塞在某个事件源上而停止对其他事件的处理,这样会严重降低对客户端的响应.原创 2021-02-07 10:35:16 · 268 阅读 · 0 评论 -
1.1.2 Linux epoll详解
1. I/O多路复用1.1 流流:一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。不管是文件,还是套接字(Socket),还是管道(包括匿名和有名管道),我们都可以把他们看作流。通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。以上面的流的定义为假设,我们需要从流中读数据,但此时,流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没有把数据传回来),这时候该怎么办?可以有下面两种..原创 2021-02-03 11:15:05 · 170 阅读 · 0 评论 -
Google protocol-buffer详解与示例应用
1. Protocol Buffer 简介Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用...原创 2020-03-16 10:51:19 · 893 阅读 · 0 评论 -
socket编程中的超时设置示例详解之三(Perl实现)
三、Perl语言实现的socket超时设置Perl同样也有对connect, send/recv的不同超时设置。下面的示例代码对这两种超时都做了设置,并每一种socket操作都做最多五次重试。#! /usr/bin/perl###########################################################################原创 2013-06-04 23:13:53 · 1986 阅读 · 0 评论 -
socket中的短连接与长连接,心跳包示例详解
TCP连接简介当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图: 原创 2013-06-06 22:51:07 · 12386 阅读 · 2 评论 -
epoll简介 与 UDP server的实现
Abstractepoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。简介:epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,原创 2013-08-27 16:02:31 · 4064 阅读 · 0 评论 -
使用IO::Socket::INET模块实现socket编程
In this article, let us discuss how to write Perl socket programming using the inbuilt socket modules in Perl.Perl socket modules provides an object interface that makes it easier to create and use翻译 2013-10-01 11:03:25 · 3711 阅读 · 0 评论 -
udp数据转发代理
一、代码#ifndef __WIN32__#include #include #include #include #include #include #include #include #include #define S_CLOSE close#define S_READ read#define S_WRITE write#else#转载 2013-12-21 20:20:12 · 4835 阅读 · 0 评论 -
幽默讲解linux的Socket IO模型
前言之前有看到用很幽默的方式讲解Windows的socket IO模型,借用这个故事,讲解下linux的socket IO模型;老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们小区门口的收发室里。这和Socket模型非常类似。下面就以老陈接收信件为例讲解linux的 Socket I/O模型。一、同步阻塞模型老陈的女儿原创 2014-02-10 14:31:22 · 2543 阅读 · 0 评论 -
linux tcpdump使用详解
简介用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。一、实用命令实例1. 默认启动#转载 2014-04-30 15:36:47 · 1033 阅读 · 0 评论 -
TCP为什么需要3次握手与4次挥手
一、为什么需要“三次握手”在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。这两种不同的表述其实阐明的是同一个问题。谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样转载 2015-02-20 09:50:46 · 1018 阅读 · 0 评论 -
wireshark抓包图解 TCP三次握手/四次挥手详解
一. TCP/IP协议族TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能。包含以下四个层次:1. 链路层, 也称作数据链路层或者网络接口层, 通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。 它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。2. 网络层, 也称作转载 2016-03-01 17:59:01 · 5827 阅读 · 0 评论 -
socket编程中的超时设置示例详解之一
简介:在网络通讯中,如果socket处于阻塞模式运行时,就需要考虑处理socket操作超时的问题。所谓阻塞模式,是指其完成指定的操作之前阻塞当前的进程或线程,直到操作有结果返回.在我们直接调用socket操作函数时,如果不进行特意声明的话,它们都是工作在阻塞模式的,如 connect, send, recv等.更多关于阻塞/非阻塞,同步/异步的讲解可以参见我总结原创 2013-06-04 23:02:07 · 4602 阅读 · 0 评论 -
socket编程中的超时设置示例详解之二
接前文二、操作(send, recv)超时对它们有两种方式来设置超时,1. 将send, recv设置成非阻塞模式,然后用select来设置超时机制,就如上面的connect方式一样。2. 使用setsockopt()函数来设置相应的超时机制。因为前一种方式在connect中重点说明,本节来主要说明第二种方式。示例代码如下:对send和recv进行了超时设原创 2013-06-04 23:05:42 · 2448 阅读 · 0 评论 -
linux socket 编程示例
前言 socket编程现在几乎成了网络编程的代名词,关于这方面的书籍与资料更是不可胜数。比较好的可以推荐一下《Unix 网络编程 卷1:套接字联网API》。1. TCP TCP提供客户与服务器之间的连接(connection),TCP客户先与某个给定服务器之间建立一个连接,再跨该连接与那个服务器交换数据,然后终止这个连接。 1.1 TCP server编原创 2013-02-24 22:37:43 · 739 阅读 · 0 评论 -
Linux 套接字编程中的 5 个隐患
前言: Bind(): Address already in use引出来的问题:前一篇文章《linux socket 编程示例》在用CTRL+C结束进程后,再启动时会出现:Bind(): Address already in use的错误提示,并导致程序直接退出; 用$netstat -an |grep 8080或$ps aux转载 2013-02-24 22:34:52 · 879 阅读 · 0 评论 -
linux Socket实现机器间的通信(Perl)
一、IO::Socket简介IO::Socket, 它是socket通信的面向对象的Perl接口。IO::Socket下又有两个子类IO::Socket::INET与IO::Socket::UNIX.现在用的是IO::Socket::INET。它的步骤是:先调用new方法,然后就可以进行基本I/O操作(使用print与getline等基本I/O方法)了,最后调用clos原创 2013-03-22 22:09:39 · 2342 阅读 · 0 评论 -
socket编程之addrinfo结构体与getaddrinfo函数
原文链接:http://blog.chinaunix.net/uid-26583794-id-3167485.htmladdrinfo结构体的定义如下:struct addrinfo { int ai_flags; /* customize behavior */ int ai_family; /* address fami转载 2013-05-09 10:23:59 · 1276 阅读 · 0 评论 -
UDP组播
随着internet的飞速发展,利用internet进行协作开发的项目越来越多。对某些应用而言,如分布式数据库开发,一个开发工作组有很多人需在不同的地点协作并经常交换情况。在组的规模比较小的情况下,只需点对点交换信息即可;如果组的规模比较大,点对点交换信息不管对网络还是对信息发送者,都是一种负担,代价昂贵。有时虽可用广播的方式进行处理,但如果在一个上百万节点的网络上向数千台转载 2013-05-09 11:32:43 · 2015 阅读 · 0 评论 -
getsockopt()和setsockopt()函数详解
功能描述:获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#i转载 2013-05-09 12:50:03 · 1502 阅读 · 0 评论 -
使用异步IO大大提高应用程序的性能之二
紧接上文下一节将深入介绍这种模型,探索这种模型使用的 API,然后展示几个命令。一、异步 I/O 的动机从前面 I/O 模型的分类中,我们可以看出 AIO 的动机。a. 阻塞模型需要在 I/O 操作开始时阻塞应用程序,这意味着不可能同时重叠进行处理和 I/O 操作。b. 同步非阻塞模型允许处理和 I/O 操作重叠进行,但是这需要应用程序根据重现的规则来检查 I/O转载 2013-05-31 18:02:44 · 927 阅读 · 0 评论 -
使用异步IO大大提高应用程序的性能之一
学习何时以及如何使用 POSIX AIO APIM. Tim Jones (mtj@mtjones.com), 顾问工程师, Emulex简介: Linux? 中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。转载 2013-05-31 17:52:25 · 1109 阅读 · 0 评论 -
socket编程的同步、异步与阻塞、非阻塞示例详解之二
接上文:http://blog.csdn.net/fireroll/article/details/9008335三、异步阻塞模式另外一个阻塞解决方案是带有阻塞通知的非阻塞 I/O。在这种模型中,配置的是非阻塞 I/O,然后使用阻塞 select 系统调用来确定一个 I/O 描述符何时有操作。使 select 调用非常有趣的是它可以用来为多个描述符提供通知,而不仅仅为一个描原创 2013-06-02 20:33:15 · 1550 阅读 · 0 评论 -
socket编程的同步、异步与阻塞、非阻塞示例详解之一
简介图 1. 基本 Linux I/O 模型的简单矩阵 每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点。本节将简要对其一一进行介绍。一、同步阻塞模式在这个模式中,用户空间的应用程序执行一个系统调用,并阻塞,直到系统调用完成为止(数据传输完成或发生错误)。/* * \brief * tcp client */#include原创 2013-06-02 20:30:36 · 1842 阅读 · 0 评论 -
IO中同步、异步与阻塞、非阻塞的区别
一、同步与异步同步/异步, 它们是消息的通知机制1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数原创 2013-05-31 11:46:38 · 1486 阅读 · 0 评论 -
Perl实现的C/S模式的本地端口发送与监听
用Perl写的一个C/S模式的:client端向本机端口消息发送消息,server端监听本机端口,接收并响应client发送的消息。也可以说是两进程间的socket通信。实现很简单,但能稳定而良好地工作,稍作改造,加些功能后,能用在很多类似需要C/S工作模式的场合。server端代码:#! /usr/bin/perl#########原创 2013-02-24 22:36:14 · 1147 阅读 · 0 评论