Linux网络编程
JohnWill_
小白一个,慢慢成长....
展开
-
DLL注入学习总结
dll注入所谓DLL 注入就是将一个DLL放进某个进程的地址空间里,让它成为那个进程的一部分。要实现DLL注入,首先需要打开目标进程。中文名 dll注入 外文名 hRemoteProcess 意 义 将一个DLL放进进程的地址空间里 方 法 打开目标进程例:hRemoteProcess = OpenProcess( PROCESS_CREATE_THREAD | //允许远程...转载 2018-09-03 20:22:46 · 1666 阅读 · 0 评论 -
TCP通信粘包问题分析和解决(全)
在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。 对于...原创 2018-07-15 20:53:50 · 554 阅读 · 0 评论 -
socket服务器开发中的SO_REUSEADDR选项与TIME_WAIT
https://www.cnblogs.com/qiaoconglovelife/p/5416715.htmlhttps://blog.csdn.net/fz835304205/article/details/16980163转载 2018-07-15 15:43:30 · 450 阅读 · 0 评论 -
进程、线程、多线程相关总结
一、说说概念1、进程(process)狭义定义:进程就是一段程序的执行过程。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。简单的来讲进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、...原创 2018-07-20 21:55:47 · 145 阅读 · 0 评论 -
OSI 7层模型与TCP/IP协议栈4层模型
OSI 7层模型是指开放系统互连参考模型(Open System InterConnect),是为了实现开放系统互连所建立的通信功能模型。OSI 7层模型第7层:应用层(Application Layer)---提供为应用程序而设的界面,来与另一个应用程序之间进行通信。是网络向用户提供应用服务的唯一窗口,因为提供的用户要求不同,也就产生了不同的协议,如:HTTP、HTTPS、FTP、ST...原创 2018-07-29 11:52:58 · 1298 阅读 · 0 评论 -
Linux进程通信之POSIX共享内存实例
POSIX共享内存不需要自己手动挂载,只要打开成功,就会自动挂载.一般挂载在 /dev/shm 目录下cd /dev/shmod -c xyz 1. shm_open 函数功能:用来创建或打开一个共享内存对象原型: int shm_open(const char* name,int oflag,mode_t mode);参数: name:共享内存对象的名字 ...原创 2018-07-20 17:03:31 · 715 阅读 · 0 评论 -
Linux进程通信之POSIX共享内存
前面已经讨论过Linux下个各种进程间的通信方式:管道,FIFO,消息队列,他们的共同特点就是通过内核来进行通信(假设POSIX消息队列也是在内核中实现的,因为POSIX标准并没有限定它的实现方式)。向管道,FIFO,消息队列写入数据需要把数据从进程复制到内核,从这些IPC读取数据的时候又需要把数据从内核复制到进程。所以这种IPC方式往往需要2次在进程和内核之间进行数据的复制,即进程间的通信必须借...原创 2018-07-20 16:55:23 · 233 阅读 · 0 评论 -
Linux下的socket网络编程tcp与udp实例
linux下socket编程可以概括为以下几个函数的运用: socket() bind() listen() connect() accept() read() write() close()函数 基于TCP实现流程server代码#include <stdio.h>#include ...原创 2018-07-15 14:06:25 · 740 阅读 · 0 评论 -
linux中fork()函数详解
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与...原创 2018-07-20 16:18:46 · 179 阅读 · 0 评论 -
Linux进程间通信之POSIX消息队列
消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。消息队列和之前讨论过的管道和FIFO有很大的区别,主要有以下两点:一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待该消息的到达,而管道和FIFO是相反的,进程向其中写消息时,管道和FIFO必需已经打开来读,那么内核会产生SIGPIPE信号。 IPC的持续性不同。管道和FIFO...原创 2018-07-20 15:32:07 · 174 阅读 · 0 评论 -
线程、进程及其联系与区别
一、进程 1、进程的概念 进程是操作系统实现并发执行的重要手段,也是操作系统为程序提供的重要运行环境抽象。 进程最根本的属性是动态性和并发性。以下是从不同角度对进程的解释: a、进程是程序的一次执行 b、进程是可以与其他计算并发执行的计算 ...原创 2018-07-21 10:32:44 · 164 阅读 · 0 评论 -
收发文件的服务器端/客户端实现
程序需求客户端接受用户输入的传输文件名 客户端请求服务器端传输该文件名所指文件服务器端代码:#include <iostream>#include <string> #include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa...原创 2018-07-29 19:45:13 · 3364 阅读 · 0 评论 -
POSIX介绍
POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准。POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。简单总结:...原创 2018-08-20 10:52:36 · 53522 阅读 · 16 评论 -
Pthread - 线程池(thread pool)实现
线程池简介线程池在多线程编程中经常要用到,其基本模型仍是生产者/消费者模型,线程池一般由线程池管理器(ThreadPool),工作线程(PoolWorker),任务( Task),任务队列(TaskQueue)四部分组成,其中 线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务; 工作线程(PoolWorker):线程池中线程,在没有任务时...原创 2018-07-22 14:40:03 · 995 阅读 · 0 评论 -
POSIX条件变量---以生产者、消费者为实例
条件变量(Condition Variables)条件变量是什么?条件变量为我们提供了另一种线程间同步的方法,然而,互斥量是通过控制线程访问数据来实现同步,条件变量允许线程同步是基于实际数据的值。 如果没有条件变量,程序员需要让线程不断地轮询,以检查是否满足条件。由于线程处在一个不间断的忙碌状态,所以这是相当耗资源的。条件变量就是这么一个不需要轮询就可以解决这个问题的方法。 条件变量总...原创 2018-07-21 20:56:29 · 472 阅读 · 0 评论 -
Linux多线程实践 --Posix信号量与互斥量解决生产者消费者问题
Posix信号量 Posix 信号量 有名信号量 无名信号量 sem_open sem_init sem_close sem_destroy sem_unlink sem_wait ...原创 2018-07-21 17:00:34 · 831 阅读 · 1 评论 -
线程属性
线程属性前篇介绍了使用缺省属性创建线程的基本原理。本章论述如何在创建线程时设置 属性。 注– 只有pthreads 使用属性和取消功能。本章中介绍的API 仅适用于POSIX 线程。除此 之外,Solaris 线程和pthreads 的功能大致是相同的。属性对象通过设置属性,可以指定一种不同于缺省行为的行为。使用pthread_create(3C)创建 线程时,或初始化同步变量...原创 2018-07-21 15:33:24 · 2484 阅读 · 1 评论 -
POSIX线程实现回射客户端/服务器
linux socket的多线程编成来实现多个客户端的连接在socket的网络编程中常常采用多线程的方法来进行与多个客户端的通信,使服务器与多个客户端的通信并发、并行地进行。相比于多进程,多线程的好处是共用一块内存空间,下面我们来看一个简单的例子,就是多个客户端将字符串发送给服务器,服务器再将字符串反转后回复给客户端 服务器 server.c #include <stdio.h&...原创 2018-07-21 15:14:03 · 218 阅读 · 0 评论 -
POSIX 线程小结
POSIX 在IEEE Std 1003.1c-1995 (也称为POSIX 1995 或 POSIX.1c) 对线程库进行了标准化。开发人员称之为 POSIX线程,或简称为 Pthreads。Pthreads 是 UNIX 系统上 C 和 C++ 语言的主要线程解决方案。 Pthreads API Pthreads API 定义了构建一个多线程程序需要的方方面面——虽然是在很底层...原创 2018-07-21 14:45:48 · 650 阅读 · 0 评论 -
Linux上posix线程库实现原理讨论
首先我们需要了解线程(threads)是个什么概念。在传统UNIX中,进程(process,就是Intel所谓的task)是调度的最小单位,复杂的大型软件往往需要有多个进程,fork+exev是很常用的技巧。但是随着需求的扩大,特别是网络服务的复杂性增长,fork的开销就成为一个瓶颈问题。为此产生了vfork和copy-on-write技术,都是为了减小fork的开销。 pthread...原创 2018-07-21 13:39:18 · 1032 阅读 · 0 评论 -
socket编程中read()、write()、recv()和send()的区别
一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用。由此网络程序里最基本的函数就是read和write函数了。ssize_t write(int fd, const void*buf,size_t nbytes);write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量. 在网络程序中,当我们向套接字文...原创 2018-07-16 10:04:23 · 11777 阅读 · 0 评论 -
System V共享内存与信号量综合应用之生产者与消费者问题解决
一.生产者---消费者问题有一个仓库(缓冲区),生产者生产出来的东西往里面扔,消费者从里面取东西。如何安排能够使两者之间不冲突。一些基本的约束条件: 1.仓库只有一个,且有固定大小。生产者有多个消费者有多个 2.生产者占用仓库前要判断仓库是否满,满了就不能争用 3.消费者使用仓库前要判断仓库是否空,空了就不能争用 4.仓库中要么只有消费者要么只有生产者P...原创 2018-07-20 11:13:08 · 452 阅读 · 0 评论 -
Linux进程间通信---信号量
进程间通信概述1. 进程通信机制一般情况下,系统中运行着大量的进程,而每个进程之间并不是相互独立的,有些进程之间经常需要互相传递消息。但是每个进程在系统中都有自己的地址空间,操作系统通过页表和实际物理内存所关联,不允许其他进程随意进入。因此,就必须有一种机制既能保证进程之间的通信,又能保证系统的安全,即进程间通信机制——IPC (Inter-Process Communication)。...原创 2018-07-19 17:04:24 · 147 阅读 · 0 评论 -
TCP和UDP的最完整的区别
TCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP保证数据正确性,UDP可能丢包 6.TCP保证数据顺序,UDP不保证 UDP应用场景: 1.面向数据报方式 2.网络数据大多为短消息 3.拥有大量Client 4.对数据安...原创 2018-07-18 09:44:06 · 225 阅读 · 0 评论 -
基于UDP(面向无连接)的socket编程
TCP/IP协议叫做传输控制/网际协议,又叫做网络通信协议。实际上,它包括上百个功能的协议。套接字(socket):在网络中用来描述计算机中不同程序与其他计算程序的通信方式。套接字分为三类;流式socket(SOCK_STREAM):提供可靠,面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性。数据报socket(SOCK_DGRAM):数据报套接字定义了一种无...原创 2018-07-18 09:31:02 · 818 阅读 · 0 评论 -
OSI模型
- 物理层: RJ45 、 CLOCK 、 IEEE802.3 (中继器,集线器,网关) - 数据链路: PPP 、 FR 、 HDLC 、 VLAN 、 MAC (网桥,交换机) - 网络层: IP 、 ICMP 、 ARP 、 RARP 、 OSPF 、 IPX 、 RIP 、 IGRP 、 (路由器) - 传输层: TCP 、 UDP 、 SPX - 会话层:...原创 2018-07-17 21:50:53 · 1482 阅读 · 0 评论 -
select、poll、epoll之间的区别总结[整理]
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数...原创 2018-07-16 22:36:16 · 105 阅读 · 0 评论 -
IO多路复用之epoll总结
1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下:#inc...原创 2018-07-16 21:58:57 · 367 阅读 · 0 评论 -
select函数的并发限制和 poll 函数应用举例
一、用select实现的并发服务器,能达到的并发数,受两方面限制1、一个进程能打开的最大文件描述符限制。这可以通过调整内核参数。可以通过ulimit -n来调整或者使用setrlimit函数设置, 但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sys/fs/file-max 查看xcy@xcy-virtual-machine:~/test/sock...原创 2018-07-16 21:10:42 · 215 阅读 · 0 评论 -
套接字IO超时设置和使用select实现超时管理
在涉及套接字IO超时的设置上有一下3种方法:1、调用alarm,它在指定的时期满时产生SIGALRM信号。这个方法涉及信号的处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm调用。 程序大概框架如下所示,如果read在5s内被SIGALRM信号中断而返回,则表示超时,否则未超时、已读取到数据则取消闹钟。为了在超时时中断read函数,可以用信号处理函数来捕捉SIGA...原创 2018-07-16 18:50:43 · 1135 阅读 · 0 评论 -
linux网络编程之shutdown() 与 close()函数详解
1.close()函数 #include<unistd.h> int close(int sockfd); //返回成功为0,出错为-1. close 一个套接字的默认行为是把套接字标记为已关闭,然后立即返回到调用进程,该套接字描述符不能再由调用进程使用,也就是说它不能再作为read或write的第一个参数,然而TCP将尝试发送已排队等待发送到对端的任何数...原创 2018-07-16 17:10:54 · 347 阅读 · 0 评论 -
socket通信中select函数的使用和解释
select函数的作用: select()在SOCKET编程中还是比较重要的,可是对于初学SOCKET的人来说都不太爱用select()写程序,他们只是习惯写诸如 conncet()、accept()、recv()或recvfrom()这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件发生,如果事件没有发生,进程或线程就被阻塞,函数不能...原创 2018-07-16 14:52:19 · 1892 阅读 · 0 评论 -
UNIX域协议(命名套接字)
这里主要介绍命名UNIX域套接字1.什么是UNIX域套接字Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务通信的一种方式。是进程间通信(IPC)的一种方式。它提供了两类套接字:字节流套接字(有点像TCP)和数据报套接字(有点像UDP)UNIX域数据报服务是可靠的,不会丢失消息,也不会传递出错。IP协议标识客户服务器是通过IP地址和端口号实现的,UNIX域协议中用于标...原创 2018-07-18 10:44:06 · 314 阅读 · 0 评论 -
socketpair的用法和理解
socketpair()函数的声明:#include <sys/types.h>#include <sys/socket.h>int socketpair(int d, int type, int protocol, int sv[2]);socketpair()函数用于创建一对无名的、相互连接的套接子。 如果函数成功,则返回0,创建好的套接字分别是sv[0...原创 2018-07-18 11:29:06 · 43480 阅读 · 5 评论 -
Linux进程间通信之共享内存(2)
一,共享内存 内核管理一片物理内存,允许不同的进程同时映射,多个进程可以映射同一块内存,被多个进程同时映射的物理内存,即共享内存。 映射物理内存叫挂接,用完以后解除映射叫脱接。1,共享内存的特点: 优点:是最快的IPC。 缺点:要编程者自己实现对共享内存互斥访问。如何实现?2,编程模型:具体函数的用法可以用man手册查看(强力推荐)进程A: writeshm.c ...原创 2018-07-19 16:11:52 · 95 阅读 · 0 评论 -
Linux进程间通信 - 共享内存(1)
1. 共享内存 - 概念共享内存,主要是实现进程间大量数据的传输。所谓共享内存,即在内存中开辟一段特殊的内存空间,多个进程可互斥访问,该内存空间具有自身特有的数据结构。共享内存的数据结构如下 - struct shmid_ds:/* Come from /usr/include/linux/shm.h *//* Obsolete, used only for backward...原创 2018-07-19 15:38:30 · 170 阅读 · 0 评论 -
Linux进程间通信综述
进程是一个独立的资源管理单元,不同进程间的资源是独立的,不能在一个进程中访问另一个进程的用户空间和内存空间。但是,进程不是孤立的,不同进程之间需要信息的交互和状态的传递,因此需要进程间数据的传递、同步和异步的机制。 当然,这些机制不能由哪一个进程进行直接管理,只能由操作系统来完成其管理和维护,Linux提供了大量的进程间通信机制,包括同一个主机下的不同进程和网络主机间的进...原创 2018-07-19 15:02:46 · 140 阅读 · 0 评论 -
Linux进程间通信(IPC)编程实践 消息队列实现回射客户/服务器
基本框架如下:对于客户端: 用进程的PID进行区分类型,发往服务器的类型(mtype)总是1,包含自己的PID,还有一行消息。对于回射服务器端: 创建一个消息队列,指定键值是1234,服务器不停地接受类型是1的消息,解析出数据部分的pid(mtext的前四个字节)——回射即可。注意回射回来的时候就没有必要再加上pid了,mtext直接写数据就可以了。可以用下面四句话概括:1)ser...原创 2018-07-19 14:37:16 · 215 阅读 · 0 评论 -
消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例
消息队列函数由msgget、msgctl、msgsnd、msgrcv四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。1. msgget函数原型 msgget(得到消息队列标识符或创建一个消息队列对象) 所需头文件 #include <sys/types.h> #include <sys/ipc.h...原创 2018-07-19 11:17:15 · 233 阅读 · 0 评论 -
linux进程间通信-----System V消息队列
什么是消息队列?消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法,消息队列具有内核持续性;每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值;消息队列也有管道(基于字节流)一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数是有上限的(MSGMNB),系统上消息队列的总数也有一个上限(MSGMNI)cat /proc/...原创 2018-07-18 22:37:48 · 164 阅读 · 0 评论