socket函数

socket多线程编程实现温度上报

折月煮酒 提交于 2020-02-03 02:45:41
1.多线程基础知识 线程是进程的一条执行路径,线程在Unix系统下,通常被称为轻量级的进程。所有的线程都是在同一进程空间运行,这也意味着多条线程将共享该进程中的全部系统资 源,如虚拟地址空间,文件描述符和信号处理等等。一个进程可以有很多线程,每条线程并行执行不同的任 务。 一个进程创建后,会首先生成一个缺省的线程,通常称这个线程为主线程(或称控制线程)。主线程就是通过main函数进入的线程,由主线程调用pthread_create()创建的线程称为子线程。 主线程和子线程的默认关系是:无论子线程执行完毕与否,一旦主线程执行完毕退出,所有 子线程执行都会终止。 主线程和子线程通常定义以下两种关系: 可会合 :这种关系下,主线程需要明确执行等待操作,在子线程结束后,主线程的等待操作执行完毕,子线 程和主线程会合,这时主线程继续执行等待操作之后的下一步操作。主线程必须会合可会合的子线程。在主线程的线程函 数内部调用子线程对象的wait函数实现,即使子线程能够在主线程之前执行完毕,进入终止态,也必须执行会合操作,否 则,系统永远不会主动销毁线程,分配给该线程的系统资源也永远不会释放。 相分离 :表示子线程无需和主线程会合,也就是相分离的,这种情况下,子线程一旦进入终止状态,这种 方式常用在线程数较多的情况下,有时让主线程逐个等待子线程结束,或者让主线程安排每个子线程结束的等待顺序,是

web应用

大城市里の小女人 提交于 2020-02-02 08:54:24
web应用 本文目录 一 Web应用程序是什么 二 基于SOCKET写一个web应用 三 手撸简单web框架 回到目录 一 Web应用程序是什么 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助IE等浏览器来运行。WEB应用程序一般是B/S模式。Web应用程序首先是“应用程序”,和用标准的程序语言,如C、C++等编写出来的程序没有什么本质上的不同。然而Web应用程序又有自己独特的地方,就是它是基于Web的,而不是采用传统方法运行的。换句话说,它是典型的浏览器/服务器架构的产物。 Web应用程序的优点 网络应用程序不需要任何复杂的“展开”过程,你所需要的只是一个适用的浏览器; 网络应用程序通常耗费很少的用户硬盘空间,或者一点都不耗费; 它们不需要更新,因为所有新的特性都在服务器上执行,从而自动传达到用户端; 网络应用程序和服务器端的网络产品都很容易结合,如email功能和搜索功能; 因为它们在网络浏览器窗口中运行,所以大多数情况下它们是通过跨平台使用的 (例如Windows,Mac,Linux等等) Web应用程序的缺点

2017-2018-1 20155321 《信息安全系统设计基础》实验五——实时系统

…衆ロ難τιáo~ 提交于 2020-02-02 06:00:33
2017-2018-1 20155321 《信息安全系统设计基础》实验五——实时系统 任务一 两人一组 基于Socket实现TCP通信,一人实现服务器,一人实现客户端 研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5 选用合适的算法,基于混合密码系统实现对TCP通信进行机密性、完整性保护。 学有余力者,对系统进行安全性分析和改进 实验步骤 实验前的准备 下载OpenSSL最新版本: 参考网址 解压源代码:输入命令 tar xzvf openssl-1.0.2n.tar.gz 进入源代码目录:输入命令 cd openssl-1.0.2n 编译安装:依次输入命令 ./config 、 make 和 sudo make install 测试是否安装成功:输入命令 make test 由上图可以发现,安装成功 Socket实现TCP通信 主要是实现TCP/IP协议中的三次握手 在实际实现的过程中按照下图所示的步骤,调用系统函数即可: 此项实践内容在实验三中已经实现 服务端 /*将buf中的字节内容写入文件描述符fd*/ ssize_t writen(int fd, const void * vptr, size_t n){ size_t nleft; ssize_t nwritten; const char * ptr; ptr = vptr;

Linux Kernel 2.6.9源码分析 –- connect

℡╲_俬逩灬. 提交于 2020-01-30 16:20:34
Linux Kernel 2.6.9源码分析 –- connect (未完待续) 首先来看下connect的原型:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 参数说明: sockfd:客户端的socket描述符 addr:服务器的socket地址 addrlen:socket地址的长度 客户端通过调用connect函数来建立与TCP服务器的连接。 下面再来看下sys_connect(): asmlinkage long sys_connect ( int fd , struct sockaddr __user * uservaddr , int addrlen ) { struct socket * sock ; char address [ MAX_SOCK_ADDR ] ; int err ; sock = sockfd_lookup ( fd , & err ) ; if ( ! sock ) goto out ; err = move_addr_to_kernel ( uservaddr , addrlen , address ) ; if ( err < 0 ) goto out_put ; err = security_socket_connect ( sock , (

Java I/O体系原理

℡╲_俬逩灬. 提交于 2020-01-29 00:20:15
基础概念 在介绍I/O原理之前,先重温几个基础概念: (1) 操作系统与内核 操作系统:管理计算机硬件与软件资源的系统软件内核:操作系统的核心软件,负责管理系统的进程、内存、设备驱动程序、文件和网络系统等等,为应用程序提供对计算机硬件的安全访问服务 2 内核空间和用户空间 为了避免用户进程直接操作内核,保证内核安全,操作系统将内存寻址空间划分为两部分:内核空间(Kernel-space),供内核程序使用用户空间(User-space),供用户进程使用 为了安全,内核空间和用户空间是隔离的,即使用户的程序崩溃了,内核也不受影响 3 数据流 计算机中的数据是基于随着时间变换高低电压信号传输的,这些数据信号连续不断,有着固定的传输方向,类似水管中水的流动,因此抽象数据流(I/O流)的概念:指一组有顺序的、有起点和终点的字节集合, 抽象出数据流的作用:实现程序逻辑与底层硬件解耦,通过引入数据流作为程序与硬件设备之间的抽象层,面向通用的数据流输入输出接口编程,而不是具体硬件特性,程序和底层硬件可以独立灵活替换和扩展 I/O 工作原理 1 磁盘I/O 典型I/O读写磁盘工作原理如下: tips: DMA:全称叫直接内存存取(Direct Memory Access),是一种允许外围设备(硬件子系统)直接访问系统主内存的机制。基于 DMA 访问方式,系统主内存与硬件设备的数据传输可以省去CPU

Nmap脚本引擎原理

我与影子孤独终老i 提交于 2020-01-28 04:23:53
Nmap脚本引擎原理 一、NSE介绍    虽然Nmap内嵌的服务于版本探测已足够强大,但是在某些情况下我们需要多伦次的交互才能够探测到服务器的信息,这时候就需要自己编写NSE插件实现这个功能。NSE插件能够完成网络发现、复杂版本探测、脆弱性探测、简单漏洞利用等功能。   转载请注明出处: http://www.cnblogs.com/liun1994/   在文章 " Nmap脚本文件分析(AMQP协议为例) " 中会将 版本探测 , NSE脚本原理 联系起来,具体分析Nmap探测的执行过程。   在文章 " 编写自己的NSE脚本" 中将以一个简单的例子说明NSE的编写。 脚本扫描通过选项被激活 -sC: 使通用scripts生效 --script: 指定自己的脚本文件 --script-trace: 查看脚本执行过程 -A: 同时进行版本探测和脚本扫描 为了不进行主机发现也不进行端口扫描,直接使用自定义的脚本探测。可以使用下面的选项: -Pn -sn --script --script-args和--script-args-file,指定脚本要读入的参数nmap --script snmp-sysdescr --script-args snmpcommunity=admin example.comnmap --script default,safe

网络套接字编程介绍

做~自己de王妃 提交于 2020-01-27 07:13:24
以下是阿鲤对套接字编程的一些理解性总结,希望对大家有所帮助;若存在错误,请慷慨指出; 1:套接字编程预备知识 2:socket api(套接字编程接口)介绍 3:udp协议的客户端/服务端的介绍实现 4:tcp协议的客户端/服务端的介绍实现 一: 套接字编程预备知识 1:ip地址 IP协议规定网络上所有的设备都必须有一个独一无二的IP地址,就好比是邮件上都必须注明收件人地址,邮递员才能将邮件送到。同理,每个IP信息包都必须包含有目的设备的IP地址,信息包才可以正确地送到目的地。同一设备不可以拥有多个IP地址,所有使用IP的网络设备至少有一个唯一的IP地址。换言之,可以分配多个IP地址给同一个网络设备,但是同一个IP地址却不能重复分配给两个或以上的网络设备。 目前使用最广泛的IP地址规则为IPV4,其使用32位二进制来规定,而截至2019年11月26日,全球所有43亿个IPv4地址已分配完毕,这意味着没有更多的IPv4地址可以分配给ISP和其他大型网络基础设施提供商;所以现在大部分上网均采用动态地址分配,即便如此依旧不够使用;虽然出现了IPV6,但是IPV6还在部署初期; 2:端口号 端口号是一个2字节16位的整数;端口号用来标识一个进程,告诉操作系统,当前这个数据要交给哪一个进程来处理;所以ip地址+端口号就可以标识出某一台主机上的某一个进程(程序); 注意

IO多路复用之epoll总结

最后都变了- 提交于 2020-01-27 03:05:52
除了自己实现之外,还有个c语言写的基于事件的开源网络库:libevent http://www.cnblogs.com/Anker/p/3265058.html 最简单的select示例: #include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> #define STDIN 0 // file descriptor for standard input int main(void) { struct timeval tv; fd_set readfds; tv.tv_sec = 2; tv.tv_usec = 500000; FD_ZERO(&readfds); FD_SET(STDIN, &readfds); // don't care about writefds and exceptfds: select(STDIN+1, &readfds, NULL, NULL, &tv); if (FD_ISSET(STDIN, &readfds)) printf("A key was pressed!\n"); else printf("Timed out.\n"); return 0; } select、poll、epoll之间的区别总结[整理] select,poll

Nginx工作原理和优化

…衆ロ難τιáo~ 提交于 2020-01-26 02:47:54
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。 Nginx的模块从结构上分为核心模块、基础模块和第三方模块: 核心模块:HTTP模块、EVENT模块和MAIL模块 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块, 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。 用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。 Nginx的模块从功能上分为如下三类。 Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。 Filters (过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。 Proxies (代理类模块)。此类模块是Nginx的HTTP Upstream之类的模块

针对TCP连接异常断开的分析

最后都变了- 提交于 2020-01-24 04:43:44
我们知道,一个基于TCP/IP的客户端-服务器的程序中,正常情况下,我会是启动服务器使其在一个端口上监听请求,等待客户端的连接;通过TCP的三次握手,客户端能够通过socket建立一个到服务器的连接;然后,两者就可以基于这个socket连接通信了。连接结束后,客户端(进程)会退出;在不需要继续处理客户请求的情况下,服务器(进程)也将退出。而且,当一个进程退出的时候,内核会关闭所有由这个进程打开的套接字,这里将触发TCP的四次挥手进而关闭一个socket连接。但是,在一些异常的情况下,譬如:服务器进程终止、服务器主机奔溃/奔溃后重启、服务器关机的情况下,客户端向服务器发起请求的时候,将会发生什么呢?下边,我们来看看这几种情况。 注意:一下描述的各种情况所使用的示例程序在文章的最后贴出 一、服务器进程终止 我们启动客户/服务器对,然后杀死子进程(模拟服务器进程崩溃的情形,我们可从中查看客户端将发生什么)。 1:在同一个主机上启动服务器和客户,并在客户上输入一行文本,以验证一切正常。正常情况下,改行文本将由服务器回射给客户。 2:找到服务器子进程的ID,通过kill命令杀死它。作为进程终止处理的部分工作,子进程中所有打开着的描述字都被关闭。这就导致向客户发送一个FIN,而客户TCP则响应以一个ACK。这就是TCP连接终止的前一半工作。 3:子进程终止时