linux网络编程
主要学习linux下的网络编程,目的用于学习和工作
后台服务器开发
这个作者很懒,什么都没留下…
展开
-
揭开高性能服务器底层面纱
揭开高性能服务器底层面纱一、前言我们经常听说高性能服务器,那什么是高性能服务器;用大白话来解释就是说处理事件快,效率高,占用服务器资源少,多路复用等等集万千宠爱于一身;但是,往往要想做到高性能,这是非常难的,需要一个好的优秀的架构和底层接口。这篇文章只限于linux平台,对于windows平台下,可以去参考下IOCP的用法,这里就不多说了~目前主流的高性能服务器底层都是封装了EPOLL接口,使用epoll进行事件处理,为什么epoll可以作为高性能服务器底层事件处理?那就让我们从源码下手,来揭开面纱原创 2020-09-06 09:09:22 · 404 阅读 · 0 评论 -
常见的网络编程面试题汇总
常见的网络编程面试题汇总一、前言上篇文章为大家介绍先目前后台开发岗位的一些要求,请查看:后端开发岗位要求汇总,希望能帮助到大家;今天这篇常见网络面试题是不对前面介绍岗位的网络部分的一个补充,这些面试题都是收集与网络,答案如果错误,请及时联系我进行修正,免的维大家造成知识的错误二、网络面试题tcp和udp的区别(1) TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接(2) TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不原创 2020-08-23 08:55:18 · 1009 阅读 · 0 评论 -
GDB 多线程之旅
GDB 多线程之旅前言首先,我来说下为什么写多线程吧!作为一个工作几年的小老鸟,接触到的最多的编程,就是多线程编程!在多线程的世界中,每一个变量,每一把锁都是至关重要,稍微一个不小心,就会冲突或者异常;此时,调试代码就是重中之重了!Windows就不说了,主要有界面,打断点,查变量等等操作简直容易的不要不要的了!Linux下的多线程调试就比较骚气了,由于没有界面的“光环”加持,所以我们必须要借助强大的辅助工具----GDB,熟练使用GDB调试程序,是一个linux程序员必备的技能之一;这里我原创 2020-08-08 09:35:45 · 280 阅读 · 0 评论 -
C++使用锁注意事项
C++使用锁注意事项并发编程中,单线程中出现数据异常混乱的现象倒是没有,但是在多线程中,出现数据混乱等现象就比较多了;在C++或者其他编程语言中,一般都会使用锁的方式来进行对数据保护;但是锁不是万能的,有时候使用锁会导致效率低下、造成死锁等异常情况发生;一般加锁原则:不用锁>可重入锁>自动锁>手动锁一般规则如下:1、对象之间的依赖顺序是单向的,保障对象A的锁和对象B的锁是按顺序的2、回调函数以及接口调用是可能影响单向性的,因此在触发回调和接口调用之前,需要手动释放锁原创 2020-07-18 10:37:55 · 923 阅读 · 0 评论 -
再谈进程—从入门到出家
再谈进程—从入门到出家这段时间由于工作上用到几个比较基础的进程编程,却发现自己好久没有接触进程了,都狂忘了!不得不感慨几句:老了老了~~~趁着对进程的回忆,也总一个简单的总结,下次可以回头看看,也帮大家做一个回顾这篇文章就叫——再谈进程—从入门到出家创建进程创建进程使用fork()函数,由fork函数创建的进程被称为子进程;#include <unistd.h>pid_t fork(void);注:fork函数被调用一次,但是返回两次,唯一的区别就是子进原创 2020-06-28 21:40:03 · 245 阅读 · 0 评论 -
掌握这个技能,你可以畅游github
掌握这个技能,你可以畅游github一、前言 github,被戏称为全球最大的同性交友网站,主要汇集了大量的程序猿,是程序员的汇集地;在github上有大量的开源项目供广大程序猿参考和学习,但是很过人都不知道怎么去使用github去获取自己想要的资料和项目; 福音来了!这篇文章带你去一探究竟!二、畅游githubGitHub Trend 与 GitHub TopicGitHub Trend总结了每天/每周/每月周期的热门 Repositories 和 Developers原创 2020-05-30 09:44:12 · 301 阅读 · 0 评论 -
内存池设计与实现
内存池设计与实现一、前言作为C++程序员,想必对于内存操作这一块是比较熟悉和操作比较频繁的;比如申请一个对象,使用new,申请一块内存使用malloc等等;但是,往往会有一些困扰烦恼着大家,主要体现在两部分:申请内存后忘记释放,造成内存泄漏内存不能循环使用,造成大量内存碎片这两个原因会影响我们程序长期平稳的运行,也有可能会导致程序的崩溃;二、内存池内存池是池化技术中的一种形式。通常我们在编写程序的时候回使用 new delete 这些关键字来向操作系统申请内存,而这样造成的后果就是每原创 2020-05-12 13:54:35 · 589 阅读 · 0 评论 -
恭喜你!发现宝藏一份---干货技术文章汇总
技术文章汇总点个【在看】谢谢你,分享让更多热人加入我们的群体自从开通【CPP后台服务器开发】微信公众号以来,收获了不少读者的青睐,为此非常感谢大家;由于工作原因,一周基本会更新一到两篇文章,有基础的,也有比较深入一些的,差不多都是平时工作中遇到的或者查漏补缺的,希望和大家一起分享;今天是周日,突然想着,现在也写了很多文章,很多都被冲到后面去了,一直没时间汇总,今天将自己所有的文章做一个归类和汇总,并且以后每篇文章都附带这篇文章,希望和大家一起进步!路漫漫其修远兮,吾将上下而求所!我们一起加油原创 2020-05-10 09:06:21 · 1159 阅读 · 0 评论 -
你必须知道的linux网络
你必须知道的linux网络linux网络模型谈到网络模型,大部分都应该知道的是OSI七层网络模型,在linux下一般说的是四层网络模型,也就是TCP/IP模型这两种我们都应该知道;七层网络模型OSI参考模型分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层四层网络模型应用层:负责向用户提供一组应用程序,比如 HTTP、FTP、DNS 等。传输层:负责端到端的通信...原创 2020-04-25 08:29:34 · 432 阅读 · 0 评论 -
我们需要懂得CMake文件
我们需要懂得CMake文件一、前言 从事于linux下的C++开发的人员都知道,在C++下编写程序是没有类似windows下编译器的一键编译和运行的按钮,只能由我们开发人员进行手动编译、运行;为了减免这种繁琐而且复杂的劳动力,出现了makefile文件,makefile文件可以帮助我们很快的编译大量文件,最终形成可执行文件;其实编写makefile文件并不是很复杂,但是后面出现了cmak...原创 2020-03-29 14:28:31 · 4694 阅读 · 1 评论 -
转载-socket总结
1. 涉及的一些背景知识1.1. nonblock socket描述对应block,如果一个socket设置为nonblock,那么其相关的操作将变为非阻塞的。这里所说的非阻塞,并不是说异步回调什么的,例如,调用recv()函数:#include <sys/types.h>#include <sys/socket.h>ssize_t recv(int sock...原创 2019-12-07 21:39:03 · 211 阅读 · 0 评论 -
看懂TIME_WAIT
看懂TIME_WAIT1.time_wait状态是什么简单来说:time_wait状态是四次挥手中server向client发送FIN终止连接后进入的状态我们经常说的三个状态:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。2.TIME_WAIT是怎样产生的?因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关...原创 2018-11-12 21:00:33 · 308 阅读 · 0 评论 -
cJOSN的安装和使用.md
cJSON的安装和使用cJson文件下载安装和使用1.下载:“https://github.com/DaveGamble/cJSON.git”2.解压 unzip XXX.zip3.cJson.c,cJSON.h拷贝到自定义的目录4.编译:gcc cJSON.c test.c -o test -lm (添加数学库)5.基于JSON相关的c函数库,生成json文件写JSON文件的函数...原创 2018-09-18 07:42:54 · 961 阅读 · 0 评论 -
JOSN基本语法.md
JSON基本语法1.JSON的基本语法数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组2.JSON 名称/值对JSON 数据的书写格式是:名称/值对。名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:"Name" : "John"3.JSON 值JSON 值可以是:数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 false...原创 2018-09-18 07:39:26 · 1000 阅读 · 0 评论 -
mxml的使用
mxml的使用1. XML的介绍: XML是由互联网联盟(World Wide Web Consortium,W3C)的XML工作组定义的。 “扩展标记语言(XML)是SGML的子集,其目标是允许普通的SGML在Web上以目前HTML的方式被服务、接收和处理。XML被设计成易于实现,且可在SGML和HTML之间互相操作。” HTML的出现极大地推动了世界范围内的互联网的发展,万维网就是...原创 2018-09-16 22:05:28 · 8078 阅读 · 0 评论 -
有坑,小心!!!mxml安装记录
转: http://blog.sina.com.cn/s/blog_88ea0ce70101a708.html https://blog.youkuaiyun.com/bbzhaohui/article/details/71512599 1.源码获取路径:http://michaelrsweet.github.io/mxml/可以直接下载.tar.gz包解压安装,或者直接通过github for...转载 2018-09-14 08:16:41 · 2029 阅读 · 1 评论 -
linux网络编程之-----多播(组播)编程
linux网络编程之—–多播(组播)编程转载:https://blog.youkuaiyun.com/jmq_0000/article/details/7095727 什么是多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通...转载 2018-09-12 07:04:43 · 632 阅读 · 0 评论 -
linux 网络编程之广播
linux 网络编程之广播转载:https://blog.youkuaiyun.com/qdlovecsj/article/details/8805483广播方式主要是指使用UDP套接口发送数据,发送数据的目标地址不是普通的地址,而是所指定网络的广播地址。什么是广播地址?是指IP地址中主机地址部分全为1的IP地址。下面是一个广播发送简单流程图。 如何实现广播发送?一般情况下使用sen...转载 2018-09-12 06:32:43 · 590 阅读 · 0 评论 -
linux IO复用之epoll
linux IO复用之epoll这篇文章是我查看网上各种文章来总结的,为自己学习来做个笔记!!!大多数来源于:https://www.cnblogs.com/lojunren/p/3856290.html首先,什么事是epoll? epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在...原创 2018-09-11 06:41:17 · 393 阅读 · 0 评论 -
Linux IO多路复用之poll
Linux IO多路复用之poll前面介绍了select,今天来介绍poll,poll 是一种高级的轮询的方法,通常用于服务器端处理多个客户端的请求的时候。 其作用于 select 很相似,但是较比 select 方法而言,效率更高,并且处理的连接个数不受内核的限制。 若是使用 select 来轮询客户端的连接,可以接受的连接个数与内核中进程所限定的可使用的文件描述符号的个数相同。 ...原创 2018-09-08 07:42:10 · 285 阅读 · 0 评论 -
Linux IO多路复用之select
Linux IO多路复用之select首先,我我们来介绍一下什么是IO多路复用:IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: 当客户处理多个描述符时(一般是交互式输入和网络套接口),必须使用I/O复用。 当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 如果一个TCP服务器既要处理监...原创 2018-09-07 06:59:54 · 367 阅读 · 0 评论 -
linux UDP并发服务器
摘要: 本文将讨论UDP的并发实现机制。给出了两种实现方法。第一种是最为常见的,TFTP传输的方式。 第二种是对UDP进一步封装,以达到并发的可能。主要是采用队列、多线程的方法。后面会给出一个简单的实现例子,以供大家参考。功能方面较为简单,以后会慢慢完善。 现将思路整理如下,有兴趣的同学可以一起讨论。代码稍后公布。 众所周知,通常所见的的TCP服务器都是并发实现的,即服务同时...转载 2018-09-06 06:41:06 · 2544 阅读 · 0 评论 -
linux 多线程并发服务器(TCP)
linux 多线程并发服务器(TCP) 所谓多线程并发服务器就是基于线程,每个客户端来了创建一个线程,由线程去处理客户端的请求。相对于多线程服务器来说,多进程服务器在创建进程时要消耗较大的系统资源,所以我们使用线程来取代进程,这样服务处理程序可以较快的创建。 据统计,创建线程与创建进程要快 10100 倍,所以又把线程称为“轻量级”进程。线程与进程不同的是:一个进程内的所有线程...原创 2018-08-27 09:24:10 · 3636 阅读 · 0 评论 -
Linux多进程并发服务器(TCP)
Linux多进程并发服务器(TCP)前言:在Linux环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时 ,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时 ,服务器能及时处理客户 ,特别是在客户服务器交互系统中。对于一个 TCP服务器,客户与服务器的连接可能并不马上关闭 ,可能会等到客户提交某些数据后再关闭 ,...原创 2018-08-27 06:36:34 · 830 阅读 · 0 评论 -
Linux (UDP和TCP)循环服务器
Linux (UDP和TCP)循环服务器参考:https://blog.youkuaiyun.com/tennysonsky/article/details/45671215 《unix网络编程》按照处理方式分为:循环服务器和并发服务器·循环服务器:服务器在同一时刻只能响应一个客户端的请求·并发服务器:服务器在同一时刻可以响应多个客户端的请求UDP循环服务器实现方法U...原创 2018-08-26 21:58:30 · 1118 阅读 · 0 评论 -
Linux UDP编程
## Linux UDP编程udp是用户传输协议,无连接的传输协议,提供不可靠的信息传送服务UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对方。所以UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。正因为UDP无需建立类如三次握手的连接,而使...原创 2018-08-26 21:01:28 · 2296 阅读 · 0 评论 -
TCP回射服务器
TCP回射服务器所谓的回射服务器就是说从客户端输入,经过服务器,然后在客户端输出,用一张图来表示最合理。这就是所谓的回射服务器,我们可以去看看《unix网络编程卷一》。它的一个大概思路就是:服务器是一个并发服务器,所以当连接到来时,会fork一个子进程来对客户请求进行处理。其他部分就按简单的客户-服务器通信的步骤来写就行,客户端:socket()—&gt;connect()—&...原创 2018-08-24 07:31:50 · 1022 阅读 · 1 评论 -
socket套接字编程
socket套接字编程一、socket概念 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现, socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关...原创 2018-08-17 07:11:00 · 616 阅读 · 0 评论 -
线程同步之信号量
线程同步之信号量一、线程限号量的概念信号量的本质是一个非负整数计数器,是共享资源的数目,通常被用来控制对共享资源的访问信号量可以实现线程的同步和互斥,通过sem_post()和sem_wait()函数对信号量 进行加减操作从而解决线程的同步和互斥 二、信号量的相关函数信号量数据类型:sem_t#include<semaphore.h>int s...原创 2018-08-16 06:28:32 · 318 阅读 · 0 评论 -
线程同步之读写锁
线程同步之读写锁一、读写锁的原理读写锁与互斥量类似,不过读写锁有更高的并行性。互斥量要么加锁要么不加锁,而且同一时刻只允许一个线程对其加锁。对于一个变量的读取,完全可以让多个线程同时进行操作 。二、读写锁的状态一把读写锁具备三种状态: 1. 读模式下加锁状态 (读锁) 2. 写模式下加锁状态 (写锁)3. 不加锁状态读写锁的特点如下: ...原创 2018-08-15 07:02:11 · 394 阅读 · 0 评论 -
【Linux】线程总结:初识、创建、等待、终止、分离
【Linux】线程总结:初识、创建、等待、终止、分离转载: https://blog.youkuaiyun.com/a1414345/article/details/70947396这篇文章通俗易懂,转载一下转载 2018-08-13 06:16:23 · 247 阅读 · 0 评论 -
线程同步之条件变量
linux下的条件变量一、线程同步之条件变量条件变量是用来等待线程而不是上锁的 ,条件变量之所以要和互斥锁一起使用,主要是因为互斥锁的一个明显的特点就是它只有两种状态:锁定和非锁定,而条件变量可以通过允许线程阻塞和等待另一个线程发送信号来弥补互斥锁的不足,所以互斥锁和条件变量通常一起使用。 条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。条件变量上的基本操作...原创 2018-08-14 07:38:36 · 471 阅读 · 0 评论 -
线程同步之互斥锁
线程同步之互斥锁 为什么要线程同步?当多线程共享相同的内存的时候,需要每一个线程看到相同的视图。当一个线程被修改时,其他的线程也可以修改或者读取这个变量,所以就需要对这些线程同步,保证不会访问到无效的变量。举个例子: 由此可见,线程同步的重要性。线程同步之互斥锁的函数:> 1. #include <pthread.h>> 2. int p...原创 2018-08-13 07:51:35 · 387 阅读 · 0 评论 -
线程创建
线程创建 1.线程的概念线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。 进程——资源分配的最小单位,线程——程序执行的最小单位” 进程有独立的地址空间,一个进...原创 2018-08-11 07:43:52 · 201 阅读 · 0 评论 -
信号通道
信号通道 1.kill函数 功能描述: 用于向任何进程组或进程发送信号。#include &amp;lt;sys/types.h&amp;gt;#include &amp;lt;signal.h&amp;gt;int kill(pid_t pid, int sig);参数: pid:可能选择有以下四种pid大于零时,pid是信号欲送往的进程的标识。pid等于零时,信号将送往所有与调用ki...原创 2018-08-10 07:26:47 · 1201 阅读 · 0 评论 -
进程间通信之信号量
转:https://blog.youkuaiyun.com/ljianhui/article/details/10243617进程间通信之信号量这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面就进入信号量的讲解。一、什么是信号量 为了防止出现因多...转载 2018-08-09 07:01:12 · 320 阅读 · 0 评论 -
进程间通信之共享内存
进程间通信之共享内存一、共享内存的介绍 共享内存可以从字面上去理解,就把一片逻辑内存共享出来,让不同的进程去访问它,修改它。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一...原创 2018-08-08 07:20:11 · 711 阅读 · 0 评论 -
进程间通信之消息队列
进程间通信之消息队列首先,我们来说一下什么是消息队列: 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。一、函数原型msgget函数原型:int msgget(key_...原创 2018-08-06 07:42:03 · 4330 阅读 · 1 评论 -
进程间通信之管道
进程间通信之管道 一、管道的概念 1.本质 (1)内核缓存区 (2)伪文件——不占用磁盘空间 2.特点 (1)两部分: (2)读端,写端,对应两个文件描述符 (3)数据写端流入,读端流出 (4)操作管道的进程被销毁之后,管道自动释放 (5)管道默认阻塞的 3.管道的原理 1.内部实现的方式:队列 环形队列 特点:先进先出 缓冲区大小: - 默认4K ...原创 2018-08-03 06:57:46 · 246 阅读 · 0 评论 -
孤儿进程与僵尸进程
孤儿进程与僵尸进程 <1>孤儿进程 概念:父进程已经退出,只剩子进程,所以子进程变成孤儿进程,init进程变成孤儿进程的父进程;目的是为了释放用户区空间,自己释放不了PCB,需要由父进程来释放。 这个需要我们使用代码来验证一下: 产生孤儿进程最简单的方法就是:让父进程提前结束进程,所以让子进程sleep(1),保证父进程先结束进程。 1 #include<s...原创 2018-07-22 23:10:03 · 411 阅读 · 0 评论