
Linux/网络
imxiangzi
这个作者很懒,什么都没留下…
展开
-
基于epoll的聊天室程序
epoll相对于poll和select这两个多路复用的I/O模型更加的高效。epoll的函数很简单,麻烦的地方在于水平出发和边沿触发。用张图来说明下ET(边沿)只是在状态反转时触发,比如从不可读到可读。而LT(水平)就是如果可读,就会一直触发。所以在使用ET的时候要做一些额外的处理,比如可读的,一直把缓冲区读完,进入不可读状态,下次来数据才会触发。下面贴出代码,只是一个简单的练转载 2016-10-17 17:08:43 · 1101 阅读 · 0 评论 -
linux socket学习(二)
原文转自http://www.cnblogs.com/lzjsky/archive/2013/03/18/2965983.html四.使用selectselect这个系统调用,是一种多路复用IO方案,可以同时对多个文件描述符进行监控,从而知道哪些文件描述符可读,可写或者出错,不过select方法是阻塞的,可以设定超时时间。 select使用的步骤如下:转载 2015-12-24 11:23:29 · 620 阅读 · 0 评论 -
linux socket学习(一)
原文转自http://www.cnblogs.com/lzjsky/archive/2013/03/18/2965983.html 大纲一.Socket简介二.BSD Socket编程准备1.地址2.端口3.网络字节序4.半相关与全相关5.网络编程模型三.socket接口编程示例四.使用select五.使用kqueue六.使用流转载 2015-12-24 11:22:48 · 666 阅读 · 0 评论 -
linux socket编程之TCP与UDP
TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议TCP/IP虽然叫传输控制协议(TCP)和网际协议(IP),但是实际上是一组协议,包含ICMP, RIP, TELENET, FTP, SMTP, ARP, TFTP等。从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。 其实自己并没有深入了解过协议,写这篇文章的目的也只是自己做下转载 2015-12-24 11:21:40 · 536 阅读 · 0 评论 -
Linux下Socket编程
什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程式员能够用他们来研发TCP/IP网络上的应用程式。要学Internet上的TCP/IP网络编程,必须理解Socket接口。Socket接口设计者最先是将接口放在Unix操作系统里面的。假如了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的 Socket数据传输是一种转载 2015-12-24 11:20:57 · 423 阅读 · 0 评论 -
linux非阻塞socket教程
本文并非解释什么是非阻塞socket,也不是介绍socket API的用法, 取而代替的是让你感受实际工作中的代码编写。虽然很简陋,但你可以通过man手册与其它资源非富你的代码。请注意本教程所说的主题,如果细说,内容可以达到一本书内容,你会发现本教程很有用。 本教程内容如下: 1. 改变一个阻塞的socket为非阻塞模式。 2.转载 2015-12-24 10:37:15 · 488 阅读 · 0 评论 -
Linux网络编程简单示例
参考博文:http://www.cnblogs.com/luxiaoxun/archive/2012/10/16/2725760.html示例程序是国嵌的linux 网络编程是通过socket(套接字)接口实现,Socket是一种文件描述符,socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维转载 2015-12-07 13:40:12 · 516 阅读 · 0 评论 -
linux 网络编程---->多路复用:select实例!
好吧,我承认找了好久,网上都没有像样的完整的实例,然后自己参照书自己写一个吧!//!> server 端代码//!> server.c#include #include nistd.h>#include #include #include #include #include #include #include #define BUF_LE转载 2015-12-07 13:35:07 · 617 阅读 · 0 评论 -
Linux网络编程之socket文件传输示例
本文所述示例程序是基于Linux平台的socket网络编程,实现文件传输功能。该示例是基于TCP流协议实现的socket网络文件传输程序。采用C语言编写。最终能够实现传输任何格式文件的文件传输程序。具体实现代码如下:Server端代码如下:?12345678910转载 2015-12-07 13:33:28 · 815 阅读 · 0 评论 -
Linux环境下网络编程杂谈
今天我们说说“Pre-网络编程”。内容比较杂,但都是在做网络应用程序开发过程中经常要遇到的问题。一、大端、小端和网络字节序小端字节序:little-endian,将低字节存放在内存的起始地址;大端字节序:big-endian,将高字节存放在内存的其实地址。 例如,数字index=0x11223344,在大小端字节序方式下其存储形式为:上图一目了然的转载 2015-12-07 13:25:42 · 392 阅读 · 0 评论 -
Linux网络通信总结
网络IO之阻塞、非阻塞、同步、异步 超时处理多路复用POLL SELECT转载 2016-01-07 22:17:24 · 398 阅读 · 0 评论 -
boost高并发网络框架+线程池
boost的官方例子,有单线程的网络框架,httpserver2是线程池的。下面参照网上某人的代码修改了一点(忘了哪位大仙的代码了) 测试工具,适用stressmark,测试效果非常好, 9000个/s #include stdio.h>#include "AuthenHandle.h"#include "configur转载 2016-01-08 13:32:57 · 2063 阅读 · 0 评论 -
高并发的epoll+线程池,业务在线程池内
epoll是linux下高并发服务器的完美方案,因为是基于事件触发的,所以比select快的不只是一个数量级。单线程epoll,触发量可达到15000,但是加上业务后,因为大多数业务都与数据库打交道,所以就会存在阻塞的情况,这个时候就必须用多线程来提速。 业务在线程池内,这里要加锁才行。测试结果2300个/s 测试工具:stressmark因为加了适用与ab的代码,所以转载 2016-01-08 13:32:12 · 484 阅读 · 0 评论 -
高并发的epoll+多线程
epoll是linux下高并发服务器的完美方案,因为是基于事件触发的,所以比select快的不只是一个数量级。单线程epoll,触发量可达到15000,但是加上业务后,因为大多数业务都与数据库打交道,所以就会存在阻塞的情况,这个时候就必须用多线程来提速。 下面是来一个网络连接创建一个线程处理业务,业务处理完,线程销毁。实际测试结果不是很理想,在没有业务的时候的测试结果是20转载 2016-01-08 13:31:26 · 5252 阅读 · 1 评论 -
poll()函数详解
poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 #include int poll(struct pollfd fd[], nfds_t nfds, int timeout); 参数: 1)第一个参数:一个结构数组,struct pollfd结构如下: struct pollfd{ int fd;转载 2016-01-08 12:55:30 · 11282 阅读 · 0 评论 -
【Linux学习】epoll详解
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 ep转载 2016-01-08 12:42:56 · 392 阅读 · 0 评论 -
Socket 同步/异步 与阻塞/非阻塞区别
在网上看了很多答案,也没找到合适的,也许本文也不是合适答案:)同步和异步关注的是消息通信机制,而阻塞非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.同步/异步是API 被调用者的通知方式。阻塞/非阻塞则是API 调用者的等待方式。同步、异步和阻塞、非阻塞是组合关系。因此有4种方式:同步阻塞同步非阻塞异转载 2016-01-08 00:31:20 · 419 阅读 · 0 评论 -
socket阻塞与非阻塞,同步与异步、I/O模型
socket阻塞与非阻塞,同步与异步作者:huangguisu1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能转载 2016-01-08 00:28:05 · 516 阅读 · 0 评论 -
Linux网络编程一步一步学 - 目录(汇总)zhuan
非常好的关于Linux网络编程的文章,我也是无意中在别人的博客里发现的,在网上搜了一下,这类的文章总共还有很多篇,最后我找到了原作者的姓名 - 周立发,以及作者的博客空间。本人坚决支持原创,在此将其文章进行了汇总,并且空间首页加入了他的博客链接。大家看过他的空间之后,相信也会收获不少。Linux网络编程一步一步学-UDP方式点对点通讯 作者:周立发 2007-01-24 21:24:33L转载 2015-12-07 13:41:20 · 846 阅读 · 0 评论 -
linux网络编程实现投票功能
投票系统1.说明:写了一个投票系统,过程是先配置好服务器,在写一个网上投票功能,要实现网上投票功能。其实功能实现还是很简单的,麻烦一点的在于过程比较繁杂,要做的东西还是挺多的!2.过程:第一步:配置httpd服务器先配置好httpd服务器。我先下载好了和http服务器的包后,由于fedora的httpd配置相对比较简单,所以我也只是简单的做了一下修改转载 2015-12-07 13:23:01 · 702 阅读 · 0 评论 -
Linux 网络编程 简单实例
一、编写Linux下socket协议TCP的ClientServer程序[c++] view plaincopy//客户端,client: #include #include #include #include #include #include #define MAXBUF 256 int m转载 2015-12-07 13:23:57 · 829 阅读 · 0 评论 -
基于tcpdump实例讲解TCP/IP协议
前言虽然网络编程的socket大家很多都会操作,但是很多还是不熟悉socket编程中,底层TCP/IP协议的交互过程,本文会一个简单的客户端程序和服务端程序的交互过程,使用tcpdump抓包,实例讲解客户端和服务端的TCP/IP交互细节。TCP/IP协议IP头和TCP头格式如下:Internet Header Format 0转载 2016-01-11 16:40:10 · 688 阅读 · 0 评论 -
tcpdump抓包二进制tcp协议详细分析
1、tcpdump -i eth0 port 11751 and src host 192.168.1.34 -x -s0[plain] view plaincopytcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening o转载 2016-01-11 16:37:14 · 2102 阅读 · 0 评论 -
超级详细Tcpdump 的用法
1、抓取回环网口的包:tcpdump -i lo2、防止包截断:tcpdump -s03、以数字显示主机及端口:tcpdump -n 第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明转载 2016-01-10 17:49:26 · 1232 阅读 · 0 评论 -
Tcpdump的详细用法
1. TCPDump介绍 TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Free转载 2016-01-10 17:48:54 · 359 阅读 · 0 评论 -
TCP通信流程解析
B/S通信简述整个计算机网络的实现体现为协议的实现,TCP/IP协议是Internet的核心协议,HTTP协议是比TCP更高层次的应用层协议。HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。浏览器(Web Brow转载 2016-01-10 17:11:11 · 872 阅读 · 0 评论 -
实战利用WireShark对Telnet协议进行抓包分析
Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务转载 2016-01-10 17:10:30 · 19772 阅读 · 0 评论 -
TCP/IP传输层,你懂多少?
你所不知道的传输层题记:23页的文档上,满满当当的写满了笔记,纸质的东西,始终害怕丢失,还是选择把它总结到博客上来。PS.老规矩,列出可能遇到的20个问题,如果您是都能回答的高手,请您绕道,我是小菜,只做自己的学习笔记。 1. 传输层的主要功能是什么?2. 传输层如何区分不同应用程序的数据流?3. 传输层有哪些协议?4. 什么是UDP转载 2016-01-10 17:09:34 · 976 阅读 · 0 评论 -
TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。 其中,ACK是可能与SYN,FIN等同时使用的转载 2016-01-10 17:08:41 · 580 阅读 · 0 评论 -
关于Tcp封包
很多朋友已经对此作了不少研究,也花费不少心血编写了实现代码和blog文档。当然也充斥着一些各式的评论,自己看了一下,总结一些心得。首先我们学习一下这些朋友的心得,他们是:http://blog.youkuaiyun.com/stamhe/article/details/4569530http://www.cppblog.com/tx7do/archive/2011/05/04/1456转载 2016-01-10 17:07:51 · 551 阅读 · 0 评论 -
Linux网络编程--多线程实现echo服务器与客户端“一对多”功能,网络编程的“Hello World!” - 壮壮熊
在linux平台下,用多线程实现echo服务器与客户端“一对多”(即 是一台服务器可以响应多个客户端的请求 )。本人写了个demo,和大家一起分享,有不足的地方,请多多指教,我是壮壮熊。编译时,在后面加上-lpthread。例如: g++ service2.cpp -o service2 -lpthread 。否则会提示线程方面的错误。echo服务器端代码:#include转载 2015-12-07 13:24:44 · 2537 阅读 · 1 评论 -
linux 网络编程-基础篇
#Socket简介是一个编程接口是一种特殊的文件描述符(everything in Unix is a file)并不仅限于TCPIP协议面向连接(Transmission Control Protocol - TCPIP)无连接(User Datagram Protocol-UDP 和 Inter-Network Packet Exchange-IPX)#Sock转载 2015-12-07 13:27:32 · 445 阅读 · 0 评论 -
组播技术
1 概述1.1 产生背景传统的IP通信有两种方式:一种是在源主机与目的主机之间点对点的通信,即单播;另一种是在源主机与同一网段中所有其它主机之间点对多点的通信,即广播。如果要将信息发送给多个主机而非所有主机,若采用广播方式实现,不仅会将信息发送给不需要的主机而浪费带宽,也不能实现跨网段发送;若采用单播方式实现,重复的IP包不仅会占用大量带宽,也会增加源主机的负载。所以,传统转载 2016-01-09 21:29:07 · 896 阅读 · 0 评论 -
linux AIO (异步IO) 那点事儿
在高性能的服务器编程中,IO 模型理所当然的是重中之重,需要谨慎选型的,对于网络套接字,我们可以采用epoll 的方式来轮询,尽管epoll也有一些缺陷,但总体来说还是很高效的,尤其来大量套接字的场景下;但对于Regular File 来说,是不能够用采用 poll/epoll 的,即O_NOBLOCK 方式对于传统文件句柄是无效的,也就是说我们的 open ,read, mkdir 之类的R转载 2016-01-09 19:23:50 · 2822 阅读 · 0 评论 -
异步AIO的研究
首先声明一下epoll+nonblock从宏观角度可以叫做全异步,但从微观的角度来看还是同步的IO。只是在数据到达后得到系统通知,然后同步执行recv取回数据,没有iowait。真正的异步IO(下面会统一叫做AIO)应该像Windows IOCP一样,传入文件句柄,缓存区,尺寸等参数和一个函数指针,当操作系统真正完成了IO操作,再执行对应的函数。实际上对于socket来说,epol转载 2016-01-09 19:23:11 · 1728 阅读 · 0 评论 -
linux下异步RPC的阶段性总结-非阻塞SOCKET客户端
尽可能使用非阻塞socketint flags, s; flags = fcntl (fd, F_GETFL, 0); if (flags == -1){ close(fd); return -1; } flags |= O_NONBLOCK; s = fc转载 2016-01-09 19:22:34 · 918 阅读 · 0 评论 -
Linux下socket异步通讯聊天程序
Linux下socket异步通讯聊天程序(转)original from: http://yangqi.org/linux-socket-asynchronous-im-system/Posted by yangqi @ 2010年02月17日 [Wed] 22:37网络课的project 1能用到的资料,程序结构比较清晰,转来学习一下什么是异步通讯?就是通讯任意一方可转载 2016-01-09 19:19:59 · 2032 阅读 · 0 评论 -
linux c socket之异步IO
[cpp] view plaincopy/* * File: UDPEchoClient-TimeOut.c * Author: 云守护 */ #include #include #include #include #include #include #include #inclu转载 2016-01-09 19:19:07 · 858 阅读 · 0 评论 -
socket编程中的超时设置示例详解之二
接前文二、操作(send, recv)超时对它们有两种方式来设置超时,1. 将send, recv设置成非阻塞模式,然后用select来设置超时机制,就如上面的connect方式一样。2. 使用setsockopt()函数来设置相应的超时机制。因为前一种方式在connect中重点说明,本节来主要说明第二种方式。示例代码如下:对send和recv进行了超时设置,并转载 2016-01-08 00:20:09 · 637 阅读 · 0 评论 -
socket编程中的超时设置示例详解之一
简介:在网络通讯中,如果socket处于阻塞模式运行时,就需要考虑处理socket操作超时的问题。所谓阻塞模式,是指其完成指定的操作之前阻塞当前的进程或线程,直到操作有结果返回.在我们直接调用socket操作函数时,如果不进行特意声明的话,它们都是工作在阻塞模式的,如 connect, send, recv等.更多关于阻塞/非阻塞,同步/异步的讲解可以参见我总结的相关专转载 2016-01-08 00:19:20 · 1828 阅读 · 0 评论