![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux网络编程
编程-浪子
学生, 编程爱好者, 喜欢学习 ,个人微信公众号:Love_gcc123
展开
-
TCP/IP基础(二)
一.最大传输单元原创 2014-10-22 16:29:54 · 772 阅读 · 0 评论 -
16.unix域协议
一.Unix域协议Uinx域套接字有几个理由: UNIX域套接字用于在同一台机器上运行的进程之间的通信。虽然因特网域套接字也可以达到同一目的,但UNIX域套接字的效率更高。 UNIX域套接字仅仅复制数据;它们并不执行协议处理,不需要添加或删除网络报头,无需计算检验和,不要产生顺序号,无需发送确认报文。 UNIX域套接字原创 2015-05-17 23:43:24 · 556 阅读 · 0 评论 -
System V 共享内存
一.共享内存数据结构对于每个共享内存区,内核维护如下信息结构,定义在, 在ubuntu中路径:/usr/include/linux/shm.h二. System V共享内存函数:#include #include int shmget(key_t key, size_t size, int shmflg); void *shmat(原创 2015-05-23 23:39:17 · 623 阅读 · 0 评论 -
System V 消息队列(一)
一、消息队列 1、消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 2、每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值 3、消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定是先入先出。 4、消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列原创 2015-05-23 09:14:17 · 701 阅读 · 0 评论 -
共享内存简介
一.共享内存 共享内存区是最快的IPC形式,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据.上图需要经过四次数据复制使用共享内存,只需要两次系统调用.二、mmap 函数#include 功能:将文件或者设备空间映射到共享内存区。原型 void *mma原创 2015-05-23 14:42:01 · 617 阅读 · 0 评论 -
Sytem V消息队列(二)
一.msgsnd 函数 功能:把一条消息添加到消息队列中 int msgsnd( int msqid, // 由msgget返回的消息队列标志吗 const void *msgp, // 一个指针,只想准备发送的消息 size_t msg原创 2015-05-23 10:03:23 · 969 阅读 · 0 评论 -
System V消息队列(三)
利用消息队列实现回射客户/服务器队列达到复用的目的 类型区分: 服务器用1标识类型,客户端用自己的进程 标识类型 对于服务器端来说,接收到一个消息结构体的类型如果为1,表示是客户请求,而mtex 字段的前4个字节存放着不同进程的pid ,后续字节才是真正的数据,服务器回射客户端时,将pid 作为类型,mtex 为实际数据,客户端只接收对应类型的数据,故可以区分不同原创 2015-05-23 10:54:04 · 575 阅读 · 0 评论 -
POSIX共享内存
POSIX共享内存不需要自己手动挂载,只要打开成功,就会自动挂载.一般挂载在 /dev/shm 目录下cd /dev/shmod -c xyz 1. shm_open 函数功能:用来创建或打开一个共享内存对象原型: int shm_open(const char* name,int oflag,mode_t mode);参数: name:共享内存原创 2015-06-06 10:40:29 · 1741 阅读 · 0 评论 -
posix 消息队列
System V IPC 消息队列 共享内存 信号量POSIX IPC 消息队列 共享内存 信号量 互斥锁 条件变量 读写锁 自旋锁 文件锁 Posix消息队列 和 System v消息队列的区别(1) 对posix消息队列的读总是返回最高优先级的最早消息,对syste原创 2015-06-05 15:46:51 · 565 阅读 · 0 评论 -
POSIX 线程(一)
一. POSIX线程先关函数POSIX线程库 与线程有关的函数构成一个完整的系列,绝大多数函数的名字都是以"pthread"打头的 要使用这些函数库,引入头文件 连接这些线程函数库时要使用编译器命令的"-lpthread"选项1. pthread_create函数功能:创建一个新的线程原型: int pthread_create(pthread_t原创 2015-06-06 17:35:15 · 651 阅读 · 0 评论 -
POSIX线程(二)
一. 线程属性 (1) 初始化与销毁属性 int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *attr); (2)获取与设置分离属性 int pthread_attr_setdetachstat原创 2015-06-06 19:17:14 · 615 阅读 · 0 评论 -
线程简介
一. 什么是线程 在一个程序里的一个执行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列" 一切进程至少都有一个执行线程.二. 进程与线程 进程是资源竞争的基本单位 线程是程序执行的对小单位 线程共享进程数据,但也拥有自己的一部分数据 线程ID 一组寄存器 栈原创 2015-06-06 11:39:31 · 632 阅读 · 0 评论 -
POSIX信号量与互斥锁
3种用于线程同步的机制: POSIX信号量,互斥锁和条件变量一.POSIX信号量常用的POSIX信号量函数如下 int sem_init(sem_t *sem, int pshared, unsigned int value);//初始化一个信号量 int sem_destroy(sem_t *sem); //销毁信号量 int sem_w原创 2015-06-07 22:20:39 · 940 阅读 · 0 评论 -
POSIX条件变量
一.条件变量 当一个线程互斥地访问某个变量时,可能发现在其他线程改变状态之前,它什么也做不了.例如,一个线程访问队列时,发现队列为空,它只能等待,直到其他线程将一个节点添加到队列中,这种情况需要条件变量. 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,原创 2015-06-08 11:40:58 · 1269 阅读 · 0 评论 -
System V 信号量(二)
一.进程的同步与互斥 进程间的两种关系:同步和互斥。 同步就是把异步环境下的一组并发进程,因直接制约而互相发送消息,二者进行互相合作、互相等待,使得各进程按一定的速度执行的过程。 互斥是指不允许两个以上的共享该资源的并发进程同时进入临界区。其中直接制约是指一组在异步环境下的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程。由于共享某原创 2015-05-25 21:30:28 · 563 阅读 · 0 评论 -
15.基于UDP协议的聊天室程序
使用UDP协议完成一个聊天室程序的小项目,大部分代码都有注释,一看就能看到的.实现的功能: (1)查看/显示已经登陆的用户信息 (2)向已登陆的用户发送消息 (3)输出错误消息,给予提示 (4)退出共有三个文件:chat_public.h原创 2015-05-17 23:14:22 · 3003 阅读 · 0 评论 -
System V共享内存与信号量综合应用之生产者与消费者问题解决
一.生产者---消费者问题有一个仓库(缓冲区),生产者生产出来的东西往里面扔,消费者从里面取东西。如何安排能够使两者之间不冲突。一些基本的约束条件: 1.仓库只有一个,且有固定大小。生产者有多个消费者有多个 2.生产者占用仓库前要判断仓库是否满,满了就不能争用 3.消费者使用仓库前要判断仓库是否空,空了就不能争用 4.仓库中要么只有消费者要么原创 2015-05-26 16:33:21 · 2704 阅读 · 2 评论 -
System V 信号量(三)之用信号量解决哲学家进餐问题
一.哲学家就餐问题 5个哲学家,5个筷子。5个哲学家围坐在一张桌子上,筷子放在分别放在每个哲学家的两旁。如果所有哲学家在某个时刻同时拿起左边的筷子,那么右边的筷子就都被其他的哲学家拿了,造成大家都无法吃饭。但是大家都不想放下左边的筷子(规则是先拿起左边筷子在拿起右边的,吃完饭在放下左,再放下右),这就是死锁。解决这个问题有个办法是在拿起筷子前先判断左右两个筷子是否原创 2015-05-26 10:25:56 · 22065 阅读 · 1 评论 -
SOCK_RAW Demystified
//SOCK_RAW Demystifiedby ithilgore - ithilgore.ryu.L@gmail.comsock-raw.org / sock-raw.homeunix.orgMay 20080x0. Index0x1. Introduction0x2. Creation0x3. IP_HDRINCL0x4. raw input0x5. raw转载 2014-10-26 18:41:54 · 994 阅读 · 0 评论 -
字节序问题
对与多字节数据,不同的CPU有不同的组织方式,并且对于单字节序内部的多个位域字段,和多字节数据一样也存在不同的组织方式.一. 大端字节序 将数据高有效位存在低内存地址中,而数据低有效位存放在高内存地址中. 网络字节序采用大端字节序. 解析: 数据部分: 0A,17,0E,06这样的顺序从高位都地位排列. 到了内存地址中, 高原创 2014-10-30 11:30:37 · 941 阅读 · 0 评论 -
一个简单的回射C/S程序
下面介绍程序中用到的socket API,这些函数都在 sys/socket.h 中。int socket(int family, int type, int protocol);socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。对于I原创 2014-10-30 12:34:37 · 1361 阅读 · 0 评论 -
5. 使用fork并发处理多个客户端的连接程序
网络服务器通常用fork来同时服务多个客户端,父进程专门负责监听端口,每次accept一个新的客户端连接就fork出一个子进程专门服务这个客户端。但是子进程退出时会产生僵尸进程,父进程要注意处理SIGCHLD信号和调用wait清理僵尸进程,最简单的办法就是直接忽略SIGCHLD信号。原创 2014-11-02 11:36:01 · 1151 阅读 · 0 评论 -
6. C/S实现对等通信
服务器只能被动接收客户端的信息,而不能主动发送信息给客户端,如果我们想实现对等通信,即P2P,可以在服务器程序用使用两个进程,一个进程接收用户的输入并发送给客户端,另一个进程被动接收客户端的消息并打印出来,此进程当read 返回0 时得知客户端已经关闭需要退出进程,此时尚有另一个进程未退出,可以通过在退出前发送消息给它,在消息处理函数中退出。当然客户端也必须使用双进程,原理与服务器程序相同。原创 2014-11-02 14:27:46 · 1143 阅读 · 0 评论 -
7.粘包的解决方案
1. 流式套接字(SOCK_STREAM) 流式套接字类型用于套接字之间进行流式I/O操作.所谓流就是指在一对互相相连的套接字的一端所写入的字节流被另一端连续接入,接入方所收到的字节流没有边界或分隔符,也没有所谓的记录长度,块大小或数据分组概念.只要有数据可读,则数据将被返回给接收方缓存. 流式套接字的另一个特点就是数据严格按写入时的顺序被接收方所读取.2. 数原创 2014-11-02 14:42:02 · 796 阅读 · 0 评论 -
10.select的使用
一. select简介原创 2014-11-03 22:40:16 · 713 阅读 · 0 评论 -
8. readline函数的实现
如果应用层协议的各字段长度固定,用readn来读是非常方便的。例如设计一种客户端上传文件的协议,规定前12字节表示文件名,超过12字节的文件名截断,不足12字节的文件名用'\0'补齐,从第13字节开始是文件内容,上传完所有文件内容后关闭连接,服务器可以先调用readn读12个字节,根据文件名创建文件,然后在一个循环中调用read读文件内容并存盘,循环结束的条件是read返回0。字段长度固定原创 2014-11-03 16:34:20 · 1138 阅读 · 0 评论 -
9.僵尸进程的处理
TCP是一个流协议 TCP是基于字节流传输的,只原创 2014-11-03 19:32:10 · 848 阅读 · 0 评论 -
11.close和shutdown函数
一.原创 2014-11-04 21:28:44 · 778 阅读 · 0 评论 -
TCP/IP基础(一)
一.TCP/IP 协议族体系结构以及主要协议 TCP/IP协议族是一个才四层协议系统。 数据链路层:实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网,令牌网等)上的传输。数据链路层两个常用的协议是ARP协议(Address Resolve Protocol,地址解析协议)和RARP协议(Revers Address Resovle Protocol,逆原创 2014-10-21 08:11:30 · 1395 阅读 · 0 评论 -
12.I/O超时设置方法
一.原创 2014-11-05 19:59:28 · 4503 阅读 · 0 评论 -
13.epoll
一.用C++ 和 epoll 实现一个服务器 用C++ 实现一个epoll并发服务器#include #include #include #include #include #include #include #include #include #include #include #include #include #include #incl原创 2015-05-09 13:31:46 · 674 阅读 · 0 评论 -
14.基于UDP协议的socket编程(1)
一.UDP 网络通信模型下面依照通信流程,我们来实现一个UDP回射客户/服务器服务器程序#include #include #include #include #include #include #include #include #define ERR_EXIT(m) \ do{ \ perror(m); \ exit(EXIT原创 2015-05-09 16:52:33 · 556 阅读 · 0 评论 -
System V 信号量(一)
一.信号量 信号量和P,V原语由Dijkstra提出 信号量 互斥:p,v在同一个进程中 同步:p.v在不同进程中 信号量值含义 s>0:s表示可用资源的个数 s=0:表示无可用资源,无等待进程 s struct semaphore {原创 2015-05-25 10:45:43 · 719 阅读 · 0 评论