一.select 使用select函数可以将多个文件描述符集中到一起统一监视,监视事件如下: 是否存在待读取数据. 是否可传输无阻塞传输数据. 是否发生异常. 将关心上述3种事件的文件描述发分别注册到对应参数(readfds,writefds,exceptfds)中去. int select(int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR…
摘要:结合前面所讲述的知识,本篇文章主要介绍了简单服务器端和客户端实现的框架流程及相关函数接口. 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字(本系列文章主要围绕TCP的内容讲解). TCP(Transmission Control Protocol)即传输控制协议,意为“对数据传输过程的控制”.因此,关注控制方法及范围有助于正确理解TCP套接字. TCP/IP协议栈 TCP/IP协议栈共分为4层,可以理解为将数据收发分为了4个层次化的过程,…
本篇文章简单描述了UDP传输协议的工作原理及特点. 理解UDP UDP和TCP一样同属于TCP/IP协议栈的第二层,即传输层. UDP套接字的特点 UDP的工作方式类似于传统的信件邮寄过程.寄信前应先在信封上填好寄信人和收信人的地址,之后贴上邮票放进邮筒即可.当然信件邮寄过程可能会发生丢失,我们也无法随时知晓对方是否已收到信件.也就是说信件是一种不可靠的传输方式,同样的,UDP所提供的也是一种不可靠的数据传输方式(以信件类比UDP只是通信形式上一致性,之前也以电话通信的方式类比了TCP的通信方式…
I/O复用:当一个或多个I/O条件满足时,我们就被通知到,这种能力被称为I/O复用. 1.I/O复用的相关系统调用 posix的实现提供了select.poll.epoll两类系统调用以及相关的函数来实现I/O复用.select以及相关联的函数如下所示: #include <sys/select.h> /* 功能:监听多个fd,等待指定的fd指定的事件发生或者超时. * nfds: 最大描述符加1. * readfds:监听读fd集合. * writefds:监听写fd集合. * except…
目录(?)[+] 客户端 服务器端 客户端 1.ERROR 2013 (HY000) at line 1: Lost connection to MySQL server during query 使用select 一个大表,query的过程中被主库kill掉会出现下面错误 2.ERROR 2006 (HY000): MySQL server has gone away 如果超过wait_timeout或者interactive_timeout时,再使用这个连接时 admin>show data…
近半年来努力付出,项目终于要正式结项了,团队4人经历了很多困难,加班加点,最终完成了!剩下的时间将总结一下在该项目中用到知识和遇到问题.今天就从swoole说起!项目中实现异步大文件传输的功能,在服务端使用了swoole,可以高效方便的实现,很多的项目其实也在用到swoole,突然间觉得swoole已经非常强大,对于phper来说,这是非常好的,可能大家都觉高大上了. 接下来将会以swoole为系列,总结一些swoole的知识,当然,官网文档有的这里就不会再多说,将会从应用场景,应用的技巧,和如…
一.TCP服务端 1.TCP服务端的默认函数调用顺序 socket()创建套接字 bind()分配套接字地址 listen()等待请求连接状态 accept()允许连接 read()/write()数据交换 close()断开连接 2.进入等待连接请求状态 只有调用了listen函数,客户端才能进入可发出连接请求的状态.即这时客户端才能调用connect()函数(若提前调用将发生错误). int listen(int sock, int backlog); 成功返回0,失败返回-1.sock指服…
一.当我们使用单进程单连接且使用readline修改后的客户端程序,去连接使用readline修改后的服务器端程序,会出现一个有趣的现象,先来看输出: 先运行服务器端,再运行客户端, simba@ubuntu:~/Documents/code/linux_programming/UNP/socket$ ./echoser_recv_peek  recv connect ip=127.0.0.1 port=54005 simba@ubuntu:~/Documents/code/linux_prog…
UDP是具有数据边界的协议,传输中调用I/O函数的次数非常重要.输入函数的调用次数要和输出函数的调用次数完全一致,这样才能保证接受全部已发送的数据. TCP套接字中需注册待传输数据的目标IP和端口,而UDP中无需注册.通过sendto函数传递数据的过程大约分为3个阶段:第1阶段:向udp套接字注册目标IP和端口号.第2阶段:传输数据.第3阶段:删除udp套接字中注册的目标地址信息. 每次调用sendto函数时都会重复上述过程.这种未注册目标地址信息的套接字成为未连接套接字,反之,注册了目标地址的…
概述 I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作.I/O复用的函数本身是阻塞的,他们提高程序的效率原因在于他们具有同时监听多个I/O事件的能力. Linux中基于socket的通信本质也是一种I/O,使用socket()函数创建的套接字默认都是阻塞的,这意味着当sockets API的调用不能立即完成时,线程一直处于等待状态,直到操作完成获得…