Linux网络编程
Hi Man
这个作者很懒,什么都没留下…
展开
-
Linux网络编程之 Socket
1.什么是socket?Socket 可以看成是用户进程与内核网络协议栈的编程接口。Socket 既可以用于本机的进程间通信,也可用于网络上不同主机的进程间通信。Socket可用于异构系统之间的通信,异构系统是指不同的架构系统或不同的操作系统,所以在微服务架构下,不同APP之间更多的采用Socket通信机制(或者封装了Socket 通信的上层进程间通信机制)。...原创 2019-06-06 07:06:35 · 160 阅读 · 0 评论 -
Linux网络编程之select与poll比较
1. select 能够达到的并发数限制–>一个进程能打开的最大文件描述符的限制–>select 中的 fd_set 集合容量的限制 (FD_SETSIZE)。2. 如何改善这两点限制呢?对于文件描述符的限制,可以通过调制内核参数来对限制扩展。通过command “ulimit -n” 可以查看 当前系统的最大文件描述符的限制。$ ulimit -n1024程序中可以通...原创 2019-06-22 18:44:34 · 187 阅读 · 0 评论 -
Linux 网络编程之 close与 shutdown
1. close 与 shutdown的 区别close – 是关闭本进程的 套接字,其他进程还是可以使用这个套接字发送接收数据。换句话说,调用close 只是将socket id 引用计数减 1, 等减 到 0 时,才真正 发送 FIN,关闭 connection。shutdown – 可以指定关闭 发送链路还是接收链路,因为 TCP 连接是全双工的,还有就是 调用 shutdown之后会立...原创 2019-06-22 12:51:01 · 189 阅读 · 0 评论 -
Linux网络编程之 Select实现 并发 server
1. 使用 select 实现的 并发 TCP server 端 小程序。有一点需要注意的是在 调用 select 函数之前 输入的 形参。比如 第二个形参 readfds,是一个输入输出参数。输入的是(ˇˍˇ) 想监听的 read 描述符,输出的是实际发生变化的 read 描述符。所以 第二次调用 select的时候 不能将第一次返回的 实参继续作为第二次的输入,否则会造成其他描述符监控...原创 2019-06-22 09:05:18 · 270 阅读 · 0 评论 -
Linux网络编程之TCP状态转换及SIGPIPE信号产生
TCP 从建立连接到 close 连接,中间会经过11个状态的转换。TCP establish connection的过程。TCP close connection的过程。CLOSING 状态的出现。netstat command:用于生成 本机 IP TCP, UDP,ICMP 等相关协议统计信息。SIGPIPE 信号产生...原创 2019-06-17 22:46:28 · 245 阅读 · 0 评论 -
Linux网络编程之简单TCP客户端服务器端实现
下面的 代码有两个问题:server 端code:#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#includ...原创 2019-06-12 07:36:53 · 340 阅读 · 0 评论 -
Linux网络编程之I/O模型 Select function
1. Unix可用的五种 I/O 模型:堵塞式I/O非堵塞式 I/OI/O 复用信号驱动式 I/O异步 I/O1-4 都是同步 I/O。2. 什么是同步与异步?同步:发出一个功能调用,然后一直等待调用返回 。异步:发出一个功能调用,不会马上知道结果,调用方也不会一直等待,而是继续往下执行,等有结果了通过回调通知 我 。3. 什么是堵塞式 I/O?应用进程调用系统调用 ...原创 2019-06-21 08:13:23 · 173 阅读 · 0 评论 -
Linux网络编程之利用信号量防止僵尸子进程
1. 问题由来?TCP server 端通过为每一个新来的连接创建新的子进程,从而达到支持 multi connection的目的,在某个连接close 掉的时候,就意味着 相应的子进程 退出,这时候就需要在父进程中做一些善后处理,防止产生僵尸进程。2. 僵尸进程是如何产生的?当一个子进程退出后,并不是立即释放所以的资源,而是通知父进程,由父进程继续后续工作,子进程通知父进程通过产生信号(S...原创 2019-06-16 22:40:28 · 241 阅读 · 0 评论 -
Linux网络编程之TCP粘包问题3
1.解决TCP粘包问题的另一种解决方案是在应用层实现数据包之间的分离。比如下面的例子,以 字符 “\n”作为两个数据包之间的分隔符。TCP server:在这里插入代码片...原创 2019-06-16 18:59:44 · 220 阅读 · 0 评论 -
Linux 网络编程之TCP粘包问题2
1. 解决粘包问题的另一种方案是在数据包头部加入包体的长度。代码如下:在这里插入代码片原创 2019-06-16 11:37:02 · 136 阅读 · 0 评论 -
Linux网络编程之 TCP 粘包问题
TCP 为什么会有粘包问题?TCP 是一种 流式连接,不会区分不同数据报之间的界限。如何解决呢?2.1 可以使用固定长度发送数据包2.2 在包头加上包体长度2.3 使用应用层协议来解决粘包?2.4 你的系统是怎么解决粘包问题的???...原创 2019-06-16 11:35:53 · 142 阅读 · 0 评论 -
Linux网络编程之UDP
1. UDP 的 特点无连接:内部不维护链接状态,也不需要三次握手。基于消息的数据传输服务:不会有 粘包问题,数据包之间是有边界的不可靠:数据包可能丢失,重复,乱序,缺少流量控制。一般情况下比TCP更高效:2. UDP 客户/服务器模型3. UDP 的 特点UDP 报文可能丢失,重复UDP报文可能乱序UDP缺乏流量控制UDP 协议报文可能被截断。如果发送的...原创 2019-06-23 18:06:13 · 785 阅读 · 0 评论