
网络编程
judgejames
这个作者很懒,什么都没留下…
展开
-
pipe函数详解
pipe函数可用于创建一个管道,以实现进程间的通信。pipe函数的定义如下: pipe函数定义中的fd参数是一个大小为2的一个数组类型的指针。该函数成功时返回0,并将一对打开的文件描述符值填入fd参数指向的数组。失败时返回 -1并设置errno。 通过pipe函数创建的这两个文件描述符 fd[0] 和 fd[1] 分别构成管道的两端,往 fd[1] 写入的数据可以从 fd[0] 读出。并且 fd[1] 一端只能进行写操作,fd[0] 一端只能进行读操作,不能反过来使用。要实原创 2018-11-19 18:44:14 · 44353 阅读 · 7 评论 -
TCP协议之三次握手四次挥手及TIMEWAIT状态
1. 简单介绍TCP协议通信连接 传输层协议主要分为TCP和UDP两个协议。UDP是无连接、不可靠的数据报服务。而TCP是面向连接的、可靠的字节流服务。使用TCP协议通信的双方必须先建立连接,然后才能开始数据的传输。并且通信的双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,交互性的工作只需要一次连接即可满足。完成数据交换之后,通信双...原创 2019-01-23 12:10:05 · 377 阅读 · 0 评论 -
TCP头部结构详解
每个TCP报文段都包含着此报文段的TCP头部信息,用于指定源端端口、目的端端口以及管理TCP连接等。完整的TCP头部结构可分为固定头部结构和头部选项两个部分。1. TCP固定头部结构16位端口号:包括了源端口号和目的端口号。进行TCP通信时,客户端通常使用系统自动选择的临时端口号(一般都很大),而服务器则使用知服务端口号或服务器管理员自定义的端口号。 32位序号...原创 2019-02-03 13:00:07 · 11350 阅读 · 3 评论 -
为什么是四次挥手不是三次挥手
1. 四次挥手过程以及状态报文段1:主动关闭方向被动关闭方发送结束报文段。 报文段2:被动关闭方发送结束报文段确认,此时主动关闭方数据已经传输完毕。 报文段3:被动关闭方数据也发送完毕,发送结束报文段。 报文段4:主动关闭方对结束报文段进行确认。 2. 可以三次挥手吗 观察四次挥手过程可见报文段3包含了报文段2中的确认值,因此三次挥手只能将报文段3和报文...原创 2019-01-26 10:32:10 · 9577 阅读 · 0 评论 -
Linux高性能服务器——I/O复用之select
I/O复用可同时监听多个文件描述符发生事件,很大程度提高了程序的性能。I/O复用适用的场合一般有如下几点:客户端程序要同时处理多个socket; 客户端程序要同时处理用户输入和网络连接。如聊天室程序; TCP服务器同时监听socket和连接socket。如服务器连接负载均衡; 服务器要同时处理TCP请求和UDP请求。如回射服务器; 服务器需要同时监听多个端口,或者处理多种服务。如x...原创 2019-01-21 15:18:28 · 401 阅读 · 0 评论 -
epoll_event结构体
epoll_event结构体一般用在epoll机制中,其定义如下:struct epoll_event{ uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */} __attribute__ ((__packed__));typedef union epoll_dat...原创 2018-12-13 23:08:10 · 23199 阅读 · 3 评论 -
TCP通信 —— 实现线程池与多个客户端进行通信
直接上代码,简单粗暴: 服务器端:int clifd[10]; /* 存放客户端套接字的数组 */sem_t sem; /* 信号量 */pthread_mutex_t mutex; /* 互斥锁 */void initCli() /* 初始化 */{ int i = 0; for(; i < 10; ++i) { clifd[i] = -1...原创 2018-11-28 12:12:09 · 1580 阅读 · 0 评论 -
使用零拷贝函数———sendfile函数以提高服务器性能
一、函数说明sendfie函数在两个文件描述符之间直接传递数据,其中的操作完全在内核中执行,从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,大大提高了效率,被称为零拷贝。sendfile函数定义如下:#include<sys/sendfile.h>ssize_t sendfile(int out_fd, int in_fd, off_t offset, size_t cou...原创 2018-12-04 17:52:04 · 398 阅读 · 0 评论 -
Linux五种IO模型性能分析
socket阻塞与非阻塞,同步与异步作者:huangguisu1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: &nb...转载 2018-11-18 11:31:26 · 285 阅读 · 0 评论 -
套接字
奋青一枚,刚刚接触网络的知识,所以想在这里整理和搜集一下最基本的知识,望同行的各位大神多多包涵,感谢! 我们知道,在网络中,使用IP地址来标示一个主机。并且,一台机器也可以有多个网络接口。所谓的IP地址就是现在大家都用到的Internet的产物,专业点可以说是TCP/IP协议的产物(只有采用同种协议才能互相通讯),IP = Internet Protocol(网络协议),IP地...原创 2018-11-09 20:04:30 · 223 阅读 · 0 评论 -
TCP编程步骤概述
刚刚接触到服务器编程的知识,来温习一下,实现最基本的TCP服务器和客户端编程流程TCP协议是面向连接的、可靠的、字节流服务。 一、创建socket服务器基本流程:socket、bind、listen、accept、recv/send、close客户端基本流程:socket、connect、send/recv、close#include&l...原创 2018-11-13 17:14:31 · 3330 阅读 · 2 评论 -
TCP与UDP的区别
TCP&UDP的区别 TCP:面向连接的、可靠的、字节流服务 UDP:无连接、不可靠、数据报服务 字节流服务:发送数据的次数与接收数据的次数没有关系。底层数据发送或接收时,数据有可能被分开或者合并(接收缓冲区和发送缓冲区) 数据报服务:数据段发送的次数和接收的次数相等,若果接收端一次未将一段数据报读取完,则UDP报文段中的数据丢失 TCP字节流...原创 2018-11-17 12:04:48 · 148 阅读 · 0 评论 -
UDP编程步骤
1. 概述UDP提供的是无连接、不可靠的数据报服务。在传输过程中数据可能会丢失。我们只有通过在应用层进行正确的控制才能修复在传输层上存在的缺陷。因此,需要我们编写可靠的UDP应用程序。UDP客户端与服务器交互的步骤如图:标题UDP客户端与服务器交互步骤及涉及到的系统调用 使用UDP协议进行通信时,客户端并不需要与服务器建立连接,只需要通过sendto系统调用...原创 2018-11-17 13:42:50 · 3454 阅读 · 0 评论 -
高级I/O函数
Linux提供了很多高级的I/O函数。他们并不像Linux基础I/O函数,如open或read函数等等我们经常会用到的。一般在编写内核模块时要实现这些I/O函数,并且在一些情况下这些系统调用有着非常高的效率。这些函数大致可分为如下三类:用于创建文件描述符的函数,包括pipe、dup/dup2函数。 用于读写数据的函数,包括readv/writev、sendfile、mmap/...原创 2018-11-19 16:56:54 · 211 阅读 · 0 评论 -
Linux高性能服务器——I/O复用之poll
I/O复用可同时监听多个文件描述符发生事件,很大程度提高了程序的性能。I/O复用适用的场合一般有如下几点:客户端程序要同时处理多个socket; 客户端程序要同时处理用户输入和网络连接。如聊天室程序; TCP服务器同时监听socket和连接socket。如服务器连接负载均衡; 服务器要同时处理TCP请求和UDP请求。如回射服务器; 服务器需要同时监听多个端口,或者处理多种服务。如x...原创 2019-02-07 12:33:07 · 225 阅读 · 0 评论