概述 Linux下进程通讯方式有很多,比较典型的有套接字,平时比较常用的套接字是基于TCP/IP协议的,适用于两台不同主机上两个进程间通信, 通信之前需要指定IP地址....但是如果同一台主机上两个进程间通信用套接字,还需要指定ip地址,有点过于繁琐....开始创建socket int socket(int domain, int type, int protocol) domain(域) : AF_UNIX type : SOCK_STREAM...return -1; } send(sock_fd,buffer,BUFFER_SIZE,0); close(sock_fd); return 0; } 参考 Linux...下的IPC-UNIX Domain Socket 进程通信之六 UDS 进程间通信简介(一) Unix域套接字(Unix Domain Socket)介绍
""" Server side: open a socket on a port, listen for a message from a client, and send an echo reply...; forks a process to handle each client connection; child processes share parent's socket descriptors...than threads--not yet on Windows, unless Cygwin or similar installed; """ import os, time, sys from socket...local host myPort = 50007 # listen on a non-reserved port number sockobj = socket...data = connection.recv(1024) # till eof when socket closed if not data: break reply =
二、UDP 编程流程 1.服务器 代码如下(示例): int main() { int sockfd = socket(AF_INET,SOCK_DGRAM,0); assert( sockfd...sockaddr*)&caddr,sizeof(caddr)); } close(sockfd); exit(0); } 2.客户端 代码如下(示例): int main() { int sockfd = socket
基本用法 Python socket 使用方法如下 socket = socket.socket(family, type[, protocal]) family代表地址家族,一般为AF_UNIX,AF_INET...AF_UNIX用于同一台机器上的进程通信,AF_INET用于IPV4协议的TCP和UDP,AF_INET6用于IPV6协议; type代表套接字类型,一般为SOCK_STREAM,SOCK_DGRAM和...---- 本地进程间通信实例 服务器端: import socket import os if __name__ == '__main__': server = socket.socket(socket.AF_UNIX...import os if __name__ == '__main__': client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)...instr = raw_input() client.send(instr) print client.recv(1024) client.close() ---- 远程进程间通信实例
在一般情况下,对于服务器进程问题需要调用bind函数,对于客户进程则不需要调用bind函数 ---- listen sys/socket.h 中有关于 listen 的定义 /* Prepare to...用户在调用socket函数之后,返回一个套接字sockfd. sockfd默认一个主动连接的套接字,也就是此时系统假设用户会对这个套接字调用connect函数,期待它主动与其它进程连接,然后在服务器编程中...由于系统默认时认为一个套接字是主动连接的,所以需要通过某种方式来告诉系统,用户进程通过系统调用listen来完成这件事 listen函数可使得流套接字sockfd处于监听状态,使得一个进程可以接受其它进程的请求...,从而成为一个服务器进程。...处理代码 EFAULT 参数中有一指针指向无法存取的内存空间 ENOTSOCK 参数s为一文件描述词,非socket EINTR 被信号所中断 EAGAIN 此操作会令进程阻断,但参数s的socket为不可阻断
而启动的 qq,迅雷,浏览器都是进程。换句话说,进程是人在系统中的代表,只要把数据给进程,人就相当于就拿到了数据。 所以:数据传输到主机不是目的,而是手段。到达主机内部,在交给主机内的进程才是目的。...特点: 端口号是一个 2 字节(16 位)的整数 用于标识一个进程,告诉操作系统当前的数据应交给哪个进程处理 IP 地址 + 端口号 可以唯一标识网络上某台主机的某个进程 一个端口号只能被一个进程占用...理解端口号和进程 ID 在公网上: IP 地址能标识唯一的一台主机,端口号,能表示主机上唯一的一个进程 IP:port == 标识全网唯一的一个进程 这种 IP+port 的模式,就叫做 socket...每一个服务的端口号必须是众所周知的,精心设计,被客户端知晓的 注意:端口号和进程ID都可以唯一表示一个进程, 但是一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定 源端口号和目的端口号:...通过 Socket API,程序可以实现跨网络的进程间通信(如通过IP地址和端口号进行的网络通信),也可以实现本地的进程间通信。
前言 UNIX/Linux 是多任务的操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间的通讯就很有必要了 进程间通信,Inter process communication...,简称 IPC,在 UNIX/Linux 下主要有以下几种方式: 无名管道 ( pipe ) 有名管道 ( fifo ) 信号 ( signal ) 信号量 ( semaphore ) 消息队列 ( message...queues ) 共享内存 ( shared memory ) 套接字 ( socket ) 这里分享一下我在学习进程通讯过程中的笔记和心得 ---- 概要 ---- 套接字 之前的各种通信机制如:pipe...,FIFO,message queue,signal ,semaphore ,shared memory 都局限于同一台计算机上的进程间通信 但是要实现不同计算机(通过网络相连)上的进程互相通信,就需要网络进程间通信...(network IPC) 套接字允许进程与不同计算机上的以及同一计算机上的其它进程通信 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket 建立网络通信连接至少要一对端口号
sys/socket.h 中有关于 socket 函数的声明 /* Create a new socket of type TYPE in domain DOMAIN, using protocol...Returns a file descriptor for the new socket, or -1 for errors. */ extern int socket (int __domain,...int __type, int __protocol) __THROW; 用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。...指定socket类型。...---- bind sys/socket.h 中有关于 bind 的定义 /* Give the socket FD the local address ADDR (which is LEN bytes
(4)Android还支持Socket,通过Socket也可以实现任意两个终端或者两个进程之间的通信。...,默认进程的进程名是包名。...(2)从IPC角度来说,Binder是Android中的一种跨进程通信方式。Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,这种通信方式在Linux中没有。...从IPC角度来说,Binder是Android中的一种跨进程通信方式, Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在linux中没有; 从Android...* */ while (socket == null) { try { socket = new Socket("localhost
如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态 僵尸状态就是Linux状态中的X死亡状态!...配置进程优先权对多任务环境的linux很有用,可以改善系统性能。...NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!
,一种是多进程,一种是多线程,两种性能相差无几,但明显多线程在资源方面明显要比多进程消耗要少的多。...} else if (rc == 0) { *ptr = 0; return n - 1; } else { return -1; } *ptr = 0; return n; } } 客户端代码(多进程多线程共用..., inet_ntop(AF_INET, &cnt_addr.sin_addr, str, sizeof(str)), ntohs(cnt_addr.sin_port)); // 有新客户端连接创建子进程...pid = fork(); if (pid == 0) { // 关闭从父进程继承下来的 socket 文件描述符 Close(sock); while (1) { // 从客户端连接后产生的新文件描述符中读取数据...0; } 编译多进程程序运行测试 编译客户端:gcc client.c wrap.c -o client 编译服务端:gcc server_fork.c wrap.c -o server_fork
函数原型(C/C++) 在 POSIX 系统(如 Linux)中,listen 函数的原型如下: int listen(int sockfd, int backlog); 在 Windows 系统中,listen...函数原型(C/C++) 在 POSIX 系统(如 Linux)中,accept 函数的原型如下: int accept(int sockfd, struct sockaddr *addr, socklen_t...EchoServer -- 多进程 上面我们写的只是单进程方面的,接下来我们来创建多进程方面的 但是这里有个问题:当前创建出子进程的时候,父进程还需等待子进程,默认这里就阻塞了 但是我们这里是让子进程去做文本处理...,如果子进程不退出/不返回,那么父进程不依然阻塞在这里嘛 阻塞之后还是无法accept,这不还是单进程嘛,但是我们还是必须得 wait,因为不 wait ,子进程一推出就会有僵尸问题 此时就需要用到 信号...EchoServer -- 线程池 引入我们之前写的【Linux】:线程库 Thread.hpp 简单封装 Thread.hpp 以及 单例模式下的【Linux】:日志策略 + 线程池(单例模式 Threadpool.hpp
在socket中,如果直接创建的话,是只能接受一个用户的请求 需要实现socketserver中的handle方法,可以实现多进程并发访问 SocketServer内部使用 IO多路复用 以及 “多线程...” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。...即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进 程” 专门负责处理当前客户端的所有请求。
linux socket的基础 linux的空间分为kernel space 和 user space, 比例是1:3 linux中一切皆文件, 所以用文件描述符来表示socket, 实际上是socket...用来进程与进程之间的通信 socket如何创建 一个进程要创建socket的流程如下所示 1....上查看socket ll /proc//fd linux默认的三个文件描述符 0 - stdin 1 - stdout 2 - stderr >& 是重定向到文件描述符...基于socket的应用 java nio java nio用channel代替了输入输出流, 这个channel, 就是socket 其原理是使用了linux kernel里的fcntl /*.../线程来操控单独的一个IO,只需一个进程/线程来操控多个IO 但是缺点是 1.
创建socket _sockfd = ::socket(AF_INET, SOCK_DGRAM, 0); if (_sockfd < 0) {...LOG(LogLevel::FATAL) socket: " << strerror(errno); Die(SOCKET_ERR); }...在网络编程中,当一个进程需要绑定一个网络端口以进行通信时,可以使用INADDR_ANY 作为 IP 地址参数。这样做意味着该端口可以接受来自任何 IP 地址的连接请求,无论是本地主机还是远程主机。...socket socket // client必须也要有自己的ip和端口!但是客户端,不需要自己显示的调用bind!!...一个端口号,只能被一个进程bind // 2. 如何理解server要显示的bind?服务器的端口号,必须稳定!!必须是众所周知且不能改变轻易改变的!
1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...新进程为子进程,而原进程为父进程 #include pid_t fork(void); 返回值:自进程中返回0,父进程返回子进程id,出错返回-1 进程调用fork,当控制转移到内核中的...else if (ret > 0) { // 异常退出 printf("sig code : %d\n", st & 0X7F); } } } 测试结果: [root@localhost linux.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....Linux鼓励将这种应用于程序之内的模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用的程序执行一定的操作,然后通过exit(n)来返回值。
前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...进程等待的概念: 我们通常说的进程等待其实是通过wait/waitpid的方式,让父进程(一般)对子进程进行资源回收的等待过程,父进程必须等待这个子进程结束后,处理它的代码和数据! 2....进程等待必要性 在了解完进程等待的概念后,新的问题出现了,我们为什么要进行进程等待,进程等待的必要性是什么?...进程等待必要性: 若子进程退出,而父进程对它不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。...父进程创建子进程的目的是为了让子进程协助自己完成任务的,而父进程需要知道子进程将任务完成得如何。这就需要通过进程等待的方式,获取子进程的退出信息。 3.
TCP socket API 详解 下面介绍程序中用到的 socket API,这些函数都在 sys/socket.h 中。...socket() 作用:打开一个网络通讯端口,如果成功的话,就像 open()一样返回一个文件描述符; 应用程序可以像读写文件一样用 read/write 在网络上收发数据; 返回值:如果 socket...if(fork())//子进程再创建孙子进程 ::exit(0);//让子进程退出,孙子进程成为孤儿进程,这样就不用父进程回收 /...; 其次父进程需要等待回收子进程,此时父进程会阻塞直到子进程完成通信,这样和之前单进程通信效果一样,所以为了不让父进程阻塞,子进程需要再创建子进程,用它来完成通信,此时父进程就可以直接回收子进程,...孙子进程就成为孤儿进程进行通信,结束后由操作系统回收。
Socket soket接口是TCP/IP网络的API。网络的socket数据传输是一种特别的I/O,socket也是一种文档描述符。...利用socket()函数打开,返回一个整型的socket描述符,然后建立连接,数据传输等等。...常用的socket类型有:流式socket(SOCK_STREAM)、数据报socket(SOCK_DGRAM)....其中流式socket是采用面向连接的TCP服务,而数据报socket则是无连接的UDP服务 Socket建立 调用: int socket(int domain, int type, int...收到连接请求时,socket执行体将建立一个新的socket,执行体将这个新socket和请求连接进程的地址联系起来,收到服务请求的初始socket仍能够继续在以前的 socket上监听,同时能够在新的
如果对你有帮助,麻烦点个在看或点个赞,感谢~ 不管是Qt开发还是linux 嵌入式应用开发,一个人的核心竞争力还是不断思考,也就是不断琢磨。...下面的程序主要是Linux C Socket 读取JSON文件并传输,然后再写入文件,其中使用了cJSON库,关于cJSON库不过多介绍,主要介绍整体的思路。 1....Server 端 使用的是socket 阻塞式,没有使用select、poll、epoll等 接收端按照JSON格式解析数据,并提取感兴趣Key所对应的Value 程序功能挺快就可以做好,做完之后进行拆解...,将socket通信独立出来,JSON解析、写文件、响应客户端JSON数据等分别写成函数。...小结 编译JSON时需要链接linux的数学库 自己琢磨如何拆解函数功能 应用程序也主要是调用别人的api,那么你的核心竞争力是什么呢 ? 如需程序工程可在公众号后台留言。
领取专属 10元无门槛券
手把手带您无忧上云