socket 实现最小化组播(多播)程序

组播是在局域网中向一个子网内加入了某个组播组的客户端发送批量发送数据,它类似于广播但并非广播,组播的地址有固定的几种,本案例中使用了239.0.0.2这个组播地址,具体实现代码分客户端和服务端,请参考: 服务端代码#include <stdio.h>#include <stdlib.h>...

epoll 基于非阻塞I/O事件驱动

该程序来源于传智博客教师课件,本人只是自己对照着写了一遍并做了注释,该模型可以承载大量客户端的连接二不会出现卡顿等情况,前提是我们交互的数据很少,如果交互数据较大,该例子还是有些小问题的。大家可以自己拓展,配合多线程可以实现大数据多客户端连接传输的程序。具体代码如下: 代码实现#include <std...

socket 实现服务端客户端时间同步

这个小案例主要是演示了服务端客户端通信,时间获取和设定的函数均是从网络上查询的,代码可以顺利编译运行,具体请查看代码和注释。 服务端代码#include <string.h>#include <netinet/in.h>#include <stdio.h>#inc...

多路 io 转接模型 select/poll

多路io转发服务器模型也是为了解决大并发多客户端场景下的问题,比多进程、多线程开销要少。多进程多线程常规情况下都是使用 accept 或 read 函数在阻塞等接收客户端发送过来的数据,而多路io模型则是提供了一个系统函数,该函数负责阻塞判断各路被监控的文件描述符是否有数据读取或写入操作,当有数据读取或写入时再让...

socket 多进程/多线程模型实现

前文我们实现了一个 socket 最小的实现,它只允许一台终端连接到服务器进行数据通信,但这样的程序对我们来说没有什么意义,所以我们一定要实现多个客户端与一个服务端通信交互数据,这样才能真正派上用场,所以本文主要介绍了两种实现多客户端连接的方案,一种是多进程,一种是多线程,两种性能相差无几,但明显多线程在资源方面...

linux/unix socket 最简单实例演示

今日开始接触 socket 网络编程,下面实例演示了服务器和客户端创建连接的流程,以及 socket 编程中需要使用的常见函数的使用方法。我们遵循下图的案例编写了一个服务端和一个客户端,目的只为写清楚每个函数的使用方法,所以只支持了一个客户端,也可以在 accept 后创建新的线程来维护客户端之间的通讯。具体参见...

linux/unix 多线程拷贝文件示例

为了进一步加深对线程的操作,本文介绍了使用多线程实现拷贝文件的一个案例,网络上虽然有很多多线程拷贝的案例,但是都存在重大 bug。我们独辟蹊径,首先将一个文件分段映射到内存(mmap),随后将每一段映射的内存通知给线程,由线程去对每一段已经映射的内存进行复制。具体实现代码如下: 代码实现#include &l...

ubuntu 安装微软雅黑和 Consolas 字体

Consolas 字体用来写代码真的是非常舒服,可惜 ubuntu 系统中默认并没有这个字体,我们需要自己下载安装,本文就介绍了如何自己手动下载并安装如上字体。先来看一下vim下使用 Consolas 字体的效果图吧。 【字体下载】YaHeiConsolas.tar 【字体安装】12345678910111...

多线程互斥锁解决哲学家就餐问题

哲学家就餐问题是一个了解和练习线程间同步的非常好的小例子,题为 5 个哲学家(线程)围成一桌就餐,但是只有 5 只筷子(锁),一个人想要吃饭就必须要拥有左侧的筷子(锁1)和右侧的筷子(锁2)才能吃饭。每一个哲学家刚进桌前都持有了自己左侧的筷子,这样所有人只有一只筷子都无法就餐,所以就要想办法去拿右侧的筷子,而因为...

信号量实现的生产者消费者模型

信号量实现生产者消费者模型,可以无需互斥量(mutex)协助就能实现。实现方法是声明两个信号量变量,两个信号量分别代表可生产产品的数量和已经生产的产品数量,然后在线程函数中维护这两个信号量变量实现生产者消费者模型。 【代码实现】#include <stdio.h>#include <pthr...