二、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
有限状态机 相关来源及参考-部分在具体模块有指明 《Linux高性能服务器编程》-游双 ---- 定义 维基百科: 在编程中有限状态机(finite state)是服务器程序逻辑单元内部的一种高效编程方法...,只不过其中的每种状态都是相互独立的 ,状态之前没有相互转移,状态转移需要状态机内部驱动。...return LINE_BAD;// 行出错 } } return LINE_OPEN;// 行数据不完整 } ---- 完整代码 #include <sys/socket.h...inet_pton( AF_INET, ip, &address.sin_addr ); address.sin_port = htons( port ); int listenfd = socket...相关参考: Linux C API 参考手册 ---- strcasecmp 功能: 比较两个字符串(忽略大小写), 函数原型: #include int strcasecmp
linux socket的基础 linux的空间分为kernel space 和 user space, 比例是1:3 linux中一切皆文件, 所以用文件描述符来表示socket, 实际上是socket...用来进程与进程之间的通信 socket如何创建 一个进程要创建socket的流程如下所示 1....pathname, MY_SOCK_PATH should be deleted using unlink(2) or remove(3) */ } 如何在linux...上查看socket ll /proc//fd linux默认的三个文件描述符 0 - stdin 1 - stdout 2 - stderr >& 是重定向到文件描述符...基于socket的应用 java nio java nio用channel代替了输入输出流, 这个channel, 就是socket 其原理是使用了linux kernel里的fcntl /*
如果对你有帮助,麻烦点个在看或点个赞,感谢~ 不管是Qt开发还是linux 嵌入式应用开发,一个人的核心竞争力还是不断思考,也就是不断琢磨。...下面的程序主要是Linux C Socket 读取JSON文件并传输,然后再写入文件,其中使用了cJSON库,关于cJSON库不过多介绍,主要介绍整体的思路。 1....Server 端 使用的是socket 阻塞式,没有使用select、poll、epoll等 接收端按照JSON格式解析数据,并提取感兴趣Key所对应的Value 程序功能挺快就可以做好,做完之后进行拆解...,将socket通信独立出来,JSON解析、写文件、响应客户端JSON数据等分别写成函数。...小结 编译JSON时需要链接linux的数学库 自己琢磨如何拆解函数功能 应用程序也主要是调用别人的api,那么你的核心竞争力是什么呢 ? 如需程序工程可在公众号后台留言。
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上监听,同时能够在新的
前言 在上一篇文章里面我们介绍了TCP的三次握手和四次挥手过程的介绍以及网络编程里面的一些api接口函数的介绍——Linux系统下socket编程之socket接口介绍(一)。...函数介绍 - 发送和接收 - (1)send和write: 首先说明的一点,之前介绍的socket这个函数,非常类似我们之前介绍的open函数,他们都会返回一下文件描述符;所以这里的send函数和write...函数作用类似,我们用man手册来查看它的具体形式和用法: #include #include ssize_t send(int...(这个转换完后不能用于网络传输,还需要调用htons或htonl函数才能将主机字节顺序转化为网络字节顺序,这两个函数先不讲,实战遇到的话,再进行解析),具体可以看下面Linux的源文: inet_aton...(2)struct sockaddr,这个结构体是linux的网络编程接口中用来表示IP地址的 标准结构体,bind、connect等函数中都需要这个结构体,这个结构体是兼容IPV4和IPV6的。
在前面的文件中,我们介绍了linux网络编程中与IP相关的知识和常用的函数总结,本文针对具体的UDP通信,来详细的介绍UDP通信的使用,包括UDP通信中的点对点通信,多播,广播等。...一、UDP通信中服务端和客户端的基本编程框架 与TCP相比较,UDP是面向无连接的通信方式,不需要connect、listen、accept等函数操作,不用维护TCP的连接、断开等状态。...后,配置一下套接字,允许进行发送广播消息,上代码 int set_broadcast = 1; setsockopt(socket, SOL_SOCKET, SO_BROADCAST, &set_broadcast...解决方法如下:(允许端口重用) int on = 1; ret = setsockopt(udp_net_sta.socket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof...(int)); if (ret < 0) { perror("socket set SO_REUSEADDR failed"); } 2、服务端程序,在创建完socket后,有一个bind的操作
3.Linux进程状态 static const char * const task_state_array[] = { "R (running)", /* 0 */ "S (sleeping)",..."T (stopped)", /* 4 */ "t (tracing stop)", /* 8 */ "X (dead)", /* 16 */ "Z (zombie)", /* 32 */ }; Linux...R状态 进程只要是R状态,就一定是在CPU运行吗?...X状态(死亡状态)&&Z状态(僵尸状态) X死亡状态只是一个返回状态,你不会在任务列表里看到这个状态,所以这里这是举例时提及,但不会验证 我们创建进程,是为了进程帮我们办事,同时也关心结果,而main函数的返回值是进程的退出码...linux当进程退出的时候,一般进程不会立即彻底退出,而是要维持一个状态叫做Z状态,也叫做僵尸状态 方便后续父进程读取子进程退出的退出结果 如何让我们看到僵尸状态呢?
前言: 在Linux操作系统中,进程状态是一个重要而又复杂的话题。了解进程状态可以帮助我们更好地理解操作系统的运行机制。那么话不多说,开启我们今天的话题。...内核中的进程状态 Linux内核给出进程状态的几个表述: /* * The task state array is a strange "bitmap" of * reasons to sleep....✈️前后台进程 我们来解释一下为什么我们看到的进程状态是 S+ 或者 R+?在Linux中,存在着 前台进程 和 后台进程 之分。...✈️X状态 X状态很简单,一般X状态表示为进程正常退出的状态,进程退出都是瞬时的,所以这个状态很难给大家演示出来,只需要知道 X状态为进程正常退出状态即可。...其实,在Linux中,如果一个父进程创建了子进程,但是父进程要先比子进程退出,这时候 子进程会被1号进程(操作系统)托管。
二.通过系统调用获取标识符 linux中可以通过 系统调用接口:getpid 获取该进程的PID,getppid可以获取父进程的PID 例: #include #include...} 三.fork函数的认识与理解 fork认识 linux...一般情况下,子进程和父进程也是共享数据的,但是一直共享数据也不现实,因为当我们要修改数据时,会把两个进程的数据都改了,这并不是我们想要的,但是重新开一块空间拷贝父进程的数据又有点浪费,所以linux就使用了一种叫写时拷贝的技术...linux中进程的状态 linux中的进程状态分为这几种 static const char * const task_state_array[] = { "R (running)", /* 0...D状态就算是阻塞状态了,S状态又叫浅度睡眠,D状态又叫深度睡眠,处于深度睡眠的进程不会响应任何请求,你只能慢慢等它结束,或是断电。
世界上有很多操作系统,常见的有:LInux,Windows,鸿蒙,Android等。每一种操作系统表达进程状态的方式都是不一样的,但大同小异,我们不能只谈进程状态而脱离了具体的系统。...接下来,我们想分析一下主流操作系统都存在的几种状态,然后具体分析LInux下的进程状态。准备好了吗?开船了!! 什么是进程状态 进程状态是指操作系统对进程的运行状态进行的描述。...LInux是如何做到的?...进程终止 SIGPIPE 往管道写时,读者已经不在了,或者往一个已断开数据流socket写数据。 进程终止 SIGPOLL 异步I/O,跟SIGIO一样。...所以在LInux退出时,一般不会彻底退出,而是先进入Z状态,Z状态是为了方便后续父进程获取子进程的退出结果。
Linux的SOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。...Socket是什么 1、 socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –>...具体如何实现,可以看看linux的内核 4.1、socket()函数 int socket(int protofamily, int type, int protocol);//返回sockfd...2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?...,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的
套接字描述符 首先会先到的是文件描述符,对Linux一切皆文件的哲学又多懂了一点儿点儿。 套接字是通信端点的抽象。与应用程序使用文件描述符一样,访问套接字需要使用套接字描述符。...Linux系统是小端字节序。 2.2 地址格式 地址确定了特定通信域中的套接字端点,地址格式与特定的通信域相关。...注意:linux的man命令可以查看api的详细说明,而且还有例子,也挺不错的。 4....传给accept的原始套接字没有关联到这个连接,而是继续保持可用状态并接受其他连接请求。 如果不关心客户端标识,可以将addr和len设置为NULL,否则addr存放的是连接的客户端的地址。...Linux Socket Server 与 Client 例子 个人觉得这只是套接字的入门,如果一个服务器要连接多个客户端呢?以后有机会和大家一起分享下select的套接字用法。
二.状态 R-可执行 Linux进程状态:R (TASK_RUNNING),可执行状态。 只有在该状态的进程才可能在CPU上运行。...S-可中断睡眠 Linux进程状态:S (TASK_INTERRUPTIBLE),可中断的睡眠状态。...处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量、sleep函数)而被挂起。这些进程的task_struct结构被放入对应事件的等待队列中。...D-不可中断睡眠 Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态。...I-空闲 Linux进程状态:I (Idle),空闲状态。
Linux Socket编程 ---- 目录 前言 Socket的功能 Socket基础 Socket类型 基本结构 基本转换函数 基本Socket使用 TCP Socket实例 UDP Socket实例...本篇不涉及太底层的网络原理,仅说明socket的基本使用方法。主要参考《Linux网络编程》。本篇源码获取方式见文底小字。...基本Socket使用 Linux同时支持面向连接和不连接类型的套接字。在面向连接的通讯中服务器和客户机在交换数据之前先要建立一个连接;在不连接通讯中数据被作为信息的一部分被交换。 ...socket主要使用到如下函数: socket()函数 —— 创建套接字。 bind()函数 —— 绑定socket地址信息。...dstAddr.sin_addr.s_addr = inet_addr(ipAddr.c_str()); dstAddr.sin_port = htons(atoi(port.c_str())); // Linux
Socket是什么 1、 socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –>...3、文件描述符和文件指针的区别: 文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。...详细内容请看linux文件系统:http://blog.csdn.net/hguisu/article/details/6122513#t7 4....具体如何实现,可以看看linux的内核 4.1、socket()函数 int socket(int protofamily, int type, int protocol);//返回sockfd...SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
Linux下的tcp编程中,第一步就是要创建socket,本文将从源码角度看下socket是如何被创建的。...类型为 // include/linux/net.h struct socket { socket_state state; short type; unsigned long...= sock_def_error_report; ... } EXPORT_SYMBOL(sock_init_data); 该方法需要注意的是以下几个字段 sk->sk_state_change 状态变化时调用...有关epoll的源码分析,请参见 Linux epoll 源码分析 1 Linux epoll 源码分析 2 Linux epoll 源码分析 3 5....8. sk状态变化回调函数分别为 sk->sk_state_change = sock_def_wakeup; sk->sk_data_ready = sock_def_readable; sk->sk_write_space
服务器端进入LAST_ACK状态。...: 在讲解这个之前,你得必须要明白在Linux系统下,一切皆是文件,(举个简单的例子,一般我们在Windows系统下,你是可以清楚的看到硬盘盘符,并标有大小的,可以直接用鼠标拖拉文件到里面去;而在Linux...Since Linux 2.6.27, the type argument serves a second purpose: in addition to specifying a socket type...下面我们来看一下在Linux系统下它的原型: BIND(2) Linux Programmer's Manual...一连接电话线,电话机可以转为可接听的状态,这时其他人可以拨打电话请求连接到该机。同样需要把套接字转化成可接收连接的状态。
不用多说,经典的TCP/IP三次握手及状态变迁图 ======================================================== =============...=========================================== 函数: socket() — 创建套接字,它会创建一个结构体及收发缓冲区。...— 用于为侦听端口创建两个队列(见上图)用于接收客户端的SYN请求 accept() — 将侦听端口中的ESTABLISHED队列中取出那些连接 connect() — 客户端连接请求 客户端过程:socket...bind的目的是将socket绑定在特定的IP/PORT口上,客户端通常在connect时会采用临时分配的PORT,IP会根据路由表选择合适的一个本地IP,通常意义下,客户端可以不指定。...listen的函数为侦听端口创建两个队列:未完成队列(SYN_RCV状态)和已完成队列。如果不调用listen,则客户端过来的SYN请求无法入队接受进一步的处理。
本文内容包括对于 Sockets API 的使用、两个可以提高性能的 socket 选项以及 GNU/Linux 优化。 为了能够开发性能卓越的应用程序,请遵循以下技巧: 最小化报文传输的延时。...对于读操作来说,最好传入可以支持的最大缓冲区,因为如果没有足够多的数据,内核也会试图填充 整个缓冲区(另外还需要保持 TCP 的通告窗口为打开状态)。...提示:Linux 内核还包括了自动对这些 socket 缓冲区进行优化的能力(请参阅下面 表 1 中的 tcp_rmem 和 tcp_wmem),不过这些选项会对整个栈造成影响。...解决方案 GNU/Linux 提供了很多可调节的内核参数,您可以使用这些参数为您自己的用途对操作系统进行动态配置。下面我们来了解一下影响 socket 性能的一些更重要的选项。...两部分的系列文章 “Linux Socket 编程”(developerWorks,2003 年 10 月和 2004 年 1 月)可以帮助您编写 socket 应用程序。
领取专属 10元无门槛券
手把手带您无忧上云