网络编程
吾竹清风
因为你努力了,所以时间给了财富!
展开
-
01大小端、网络字节序、地址转换函数的使用
#include <stdio.h>#include <string.h>#include <sys/socket.h>#include <sys/socket.h>#include <netinet/in.h>#include <netinet/ip.h> /* superset of previous */#...原创 2018-09-12 21:05:39 · 512 阅读 · 0 评论 -
15_2 msgsend()和msgrcev()
dm03_msgsend.c#include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <errno.h> #include <stdlib.h>翻译 2018-10-16 19:03:21 · 642 阅读 · 0 评论 -
15_1msgctl的使用
#include &lt;stdio.h&gt;#include &lt;string.h&gt;#include &lt;sys/types.h&gt;#include &lt;sys/ipc.h&gt;#include &lt;sys/msg.h&gt;#include &lt;errno.h&gt;翻译 2018-10-16 18:36:43 · 238 阅读 · 0 评论 -
15_ipc中的消息队列
消息队列 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值 消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数是有上限的(MSGMNB),系统上消息队列的总数也有一个上限(MSGMNI)对比:管道:流管道 先进先出 消息:有边界可以...翻译 2018-10-16 17:03:16 · 403 阅读 · 0 评论 -
13五种I/O模型
阻塞I/O说明1:当上层应用app1调用recv系统调用时,如果对等方没有发送数据(缓冲区没有数据),上层应用app1将阻塞(默认行为,被linux内核阻塞);说明2:当对等方发送了数据,linux内核recv端缓冲区,有数据后,内核会把数据copy给用户空间。然后上层应用app1解除阻塞,执行下一步操作。非阻塞IO说明1:上层应用程序app2将套接字设置成非阻塞模式。说明2...翻译 2018-09-26 21:36:07 · 158 阅读 · 0 评论 -
12、close与shutdown区别
close终止了数据传送的两个方向。 shutdown可以有选择的终止某个方向的数据传送或者终止数据传送的两个方向。 shutdown how=1就可以保证对等方接收到一个EOF字符,而不管其他进程是否已经打开了套接字。而close不能保证,直到套接字引用计数减为0时才发送。也就是说直到所有的进程都关闭了套接字。思考1客户端向服务器发送:FIN(close) E D ...原创 2018-09-26 20:33:53 · 1229 阅读 · 0 评论 -
11SIGPIPE信号
如果对方socket已关闭,对等方再发写数据,则会产生SIGPIPE信号 SIGPIPE信号会让进程终止(man 7 signal,阅读SIGPIPE默认ACT) 往一个已经接收FIN的套接中写是允许的,接收到FIN仅仅代表对方不再发送数据。 在收到RST段之后,如果再调用write就会产生SIGPIPE信号,对于这个信号的处理我们通常忽略即可。signal(SIGPIPE, SI...原创 2018-09-26 19:01:06 · 458 阅读 · 0 评论 -
10深刻理解TCP/IP的11种协议状态
水水水水原创 2018-09-25 20:58:18 · 2574 阅读 · 0 评论 -
09服务器多进程并发子进程退出问题-解决僵尸进程的方法
11multi_client.c#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <...翻译 2018-09-20 15:12:42 · 1239 阅读 · 0 评论 -
08包尾加上\n编程实践-readline与recv的结合使用
\n作为协议的边界 ssize_t recv(int s, void *buf, size_t len, int flags); 与read相比,只能用于套接字文件描述符; 多了一个flags MSG_OOB This flag requests receipt of out-of-band data that would not be received in t...原创 2018-09-20 14:25:04 · 256 阅读 · 0 评论 -
07tcp粘包的原因以及处理的方法,网络三大编程函数的使用
说明tcp 字节流 无边界udp 消息、数据报 有边界对等方,一次读操作,不能保证完全把消息读完。对方接受数据包的个数是不确定的。产生粘包问题的原因 1、SQ_SNDBUF 套接字本身有缓冲区 (发送缓冲区、接受缓冲区) 2、tcp传送的端 mss大小限制 3、链路层也有MTU大小限制,如果数据包大于&gt;MTU要在IP层进行分片,导致消息分割。 4、tcp的流量控制和拥塞...翻译 2018-09-20 14:15:33 · 275 阅读 · 0 评论 -
06点对点通信
注意要点:(1)父子进程共享文件描述符,注意各自的职责(2)注意避免僵尸进程的产生(3)信号处理就是软中断5p2pclient.c#include &lt;stdio.h&gt;#include &lt;string.h&gt;#include &lt;stdlib.h&gt;#include &lt;sys/socket.h&gt;#include &am翻译 2018-09-20 13:56:06 · 487 阅读 · 0 评论 -
05多进程间使用信号进行通信
#include <stdlib.h>#include <string.h>#include <signal.h>#include <unistd.h>#include <stdio.h>#include <sys/ipc.h>#include <sys/shm.h>#include <翻译 2018-09-20 13:46:13 · 463 阅读 · 0 评论 -
04服务器支持多客户端
fork() 复制进程的数据段、代码段、堆栈段、PCB父子进程共享的是:(1)打开的文件(2)mmap建立的映射区独享的是 0-3G地址空间刚fork后,父子进程相同处:全局变量、.data、.text 、栈、堆、环境变量、用户ID、宿主目录、进程工作目录、信号处理方式不同之处:进程id、fork返回值、父进程id、进程运行时间、闹钟(定时器...翻译 2018-09-20 13:36:48 · 196 阅读 · 0 评论 -
03网络编程基本模型及api的讲解
TCP客户/服务器模型socketsocket函数 包含头文件<sys/socket.h> 功能:创建一个套接字用于通信 原型 int socket(int domain, int type, int protocol); 参数 domain :指定通信协议族(protocol family) type:指定socket类型,流式套接字SOCK_S...翻译 2018-09-20 12:40:54 · 291 阅读 · 0 评论 -
02网络基本概念
1、socket基本概念什么是socket? socket可以看成是用户进程与内核网络协议栈的编程接口。 socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。IPv4套接口地址结构 IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件&lt;netinet/in.h&gt;中struct soc...翻译 2018-09-20 11:40:55 · 126 阅读 · 0 评论 -
14_udp基础知识
1. UDP的特点 无连接 基于消息的数据传输服务 不可靠 一般情况下UDP更加高效 不粘包但丢包UDP客户/服务基本模型- UDP注意点 UDP报文可能会丢失、重复 UDP报文可能会乱序 UDP缺乏流量控制udp缓冲区写满以后,没有流量控制机制,会覆盖缓冲区。即缓冲区写满后,再写会覆盖!! UDP协议数据报文截断如果接收到的数据报,大于缓冲区;报文可...翻译 2018-10-10 20:36:28 · 422 阅读 · 0 评论