socket函数

GPRS测试服务端

匆匆过客 提交于 2019-11-29 21:51:23
项目是通过设备的GPRS和服务器端连接,然后把当前的时间发送到设备端 这里只是服务端的代码 import os import sys import time import traceback import http.client import selectors import socket from datetime import datetime from PyQt5.QtGui import QIcon, QFont, QTextCursor from PyQt5.QtCore import QCoreApplication, pyqtSignal, QThread, QObject from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QTextEdit, QPushButton , QGroupBox, QVBoxLayout, QHBoxLayout, QGridLayout) class GprsTestTcpServerWork(QObject): def __init__(self,server_port): super().__init__() self.tcp_server_selector = selectors.DefaultSelector() self.tcp

专题 17 SOCKET并发程序设计

独自空忆成欢 提交于 2019-11-29 21:40:17
非阻塞并发模型 函数 fcntl 设置套接字描述符的 O_NONBLOCK 标志后,即可将 I/O 方式更改为非阻塞方式。此时函数 read,recv,recvfrom,write, send 以及 accept 在调用不成功后立即返回。 设置套接字描述符 nSock 设置为非阻塞方式: int nType; nType = fcntl(nSock, F_GETFL, 0); fcntl(nSock, F_SETFL,nType | O_NONBLOCK); 设置阻塞套接字程序设计的基本流程: 非阻塞套接字的程序一般包含一段循环代码,在循环代码中采用轮询的方式,分别调用套接字的输入、输出、申请连接或连接处理函数,从而达到并发处理多个套接字的目的。 /**************************************************************************/ /********************套接字的非阻塞并发实例********************************/ /**************************************************************************/ //定义设置非阻塞模式宏 #define Fsetnonblock(a) \ {\ nType =

[深入理解Android卷一全文-第三章]深入理解init

若如初见. 提交于 2019-11-29 20:44:10
由于《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在OSC博客中全文转发这两本书的全部内容。 第3章 深入理解init 本章主要内容 · 深入分析init。 本章涉及的源代码文件名及位置 下面是本章分析的源码文件名及其位置。 · init.c system/core/init/init.c · parser.c system/core/init/parser.c · builtins.c system/core/init/builtins.c · keywords.h system/core/init/keywords/h · init.rc system/core/rootdir/init.rc · properties_service.c system/core/init/properties_service.c · libc_init_dynamic.c bionic/libc/bionic/libc_init_common.c · libc_init_common.c bionic/libc/bionic/libc_init_common.c · properties.c system/core/libcutils/properties.c 3.1 概述 init是一个进程,确切地说

python中socket模块属性

一曲冷凌霜 提交于 2019-11-29 19:45:45
数据属性 描述 AF_UNIX,AF_INET,AF_INET6 python支持的套接字家族 SOCK_STREAM,SOCK_DGRAM 套接字类型(TCP=流,UDP=数据报) has_ipv6 表示是否支持IPv6的标志变量 异常 描述 error 套接字相关错误 herror 主机和地址相关错误 gaierror 地址相关错误 timeout 超时 函数 描述 socket() 创建一个套接字对象 socketpair() 创建一对套接字 fromfd() 用一个已打开的文件描述符创建一个套接字对象 数据属性 描述 ssl() 在套接字初始化一个安全套接字层。不做证书验证 getaddrinfo() 得到地址信息 getfqdn() 返回完整的域的名字 gethostname() 得到当前主机名 gethostbyname() 由主机名得到对应的ip地址 gethostbyname_ex() gethostbyname()的扩展版本,返回主机名,主机所有的别名和IP地址列表 gethostbyaddr() 由IP地址得到DNS信息,返回一个类似gethostbyname_ex()的3元组 getservbyname()/getservbyport() 由服务名得到对应的端口号或相反 getprotobyname() 由协议名(如'tcp')得到对应的号码 数据属性 描述

[C++] epoll server实例

扶醉桌前 提交于 2019-11-29 19:11:36
// IO多路复用,事件驱动+非阻塞,实现一个线程完成对多个fd的监控和响应,提升CPU利用率 // epoll优点: // 1.select需要每次调用select时拷贝fd,epoll_ctl拷贝一次,epoll_wait就不需要重复拷贝 // 2.不需要像select遍历fd做检查,就绪的会被加入就绪list,遍历list完成处理 // 3.没有最大连接限制,与最大文件数目相关:cat /proc/sys/fs/file-max,与内存相关 // epoll实现相关: // 1.epoll_ctl,将fd的event使用RB tree保存,读写O(logN); // 2.一旦有event,内核负责添加到rdlist链表 // 3.epoll_wait检查链表看是否有事件,并进行处理 // Ref // https://www.cnblogs.com/lojunren/p/3856290.html // http://blog.chinaunix.net/uid-28541347-id-4273856.html // Question: // 是否需要每个event一个实例? #include <cstdlib> /* exit() */ #include <cstdio> /* perror(): 打印信息+发生错误的原因,可用于定位。 */ #include

Android Zygote进程启动分析

删除回忆录丶 提交于 2019-11-29 18:42:35
dvm,app进程,linux进程三者关系 DVM指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念 Zygote进程与app进程关系 Zygote是java层的进程即它也拥有一个独立的Dalvik 虚拟机实例,它是被linux层的第一个用户空间Init进程所启动的,它的主要作用就是用来孵化 app进程 和 系统进程 fork一个app进程,是通过ActivityManagerService类向Zygote发出fork命令,ActivityManagerService是在系统进程,但是Zygote处于自己的进程中,它们之间的通信没有采用binder机制,而是采用了socket机制,因此我们可以把Zygote称为一个孵化server,ActivityMamagerService称为一个client 下面的图描述了上面的过程 涉及到的类 我们先来梳理这个过程中使用到的类,并且这些类是做什么的 以server和client2个维度来归纳这些类 Zygote进程启动分析 大家都知道android系统的Zygote进程是所有的android进程的父进程,包括SystemServer和各种应用进程都是通过Zygote进程fork出来的

i.mx6 Android5.1.1 Zygote

ぐ巨炮叔叔 提交于 2019-11-29 18:38:25
0. 总结: 0.1 相关源码目录: framework/base/cmds/app_process/app_main.cpp frameworks/base/core/jni/AndroidRuntime.cpp frameworks/base/core/jni/com_android_internal_os_ZygoteInit.cpp frameworks/base/core/java/com/android/internal/os/ZygoteInit.java frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java 0.2 流程总结: 1. init.rc启动进入app_main.cpp 2. app_main.cpp查看init.rc给的相关参数,进行处理进入AndroidRuntime.cpp 3. AndroidRuntime.cpp启动虚拟机,初始化JNI,然后根据函数名通过反射机制加载zygote,进入JAVA层zygote的Zygote.java 4. 注册socket,加载各种资源(类,共享资源,共享库),启动SystemServer服务,循环接收socket,创建新进程 1. native层init.rc(进入zygote) #名字为zygote的服务,可执行文件路径为

python之协程

醉酒当歌 提交于 2019-11-29 16:38:08
一、协程理论 1.1 协程产生的背景 之前我们学习了线程、进程的概念,了解了在操作系统中 进程是资源分配的最小单位,线程是CPU执行的最小单位。 随着我们对于效率的追求不断提高, 基于单线程来实现并发 又成为一个新的课题,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发。这样就可以节省创建线进程所消耗的时间。 本节我们就基于单线程来实现并发,首先我们要回顾一下并发的本质: 切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制) (1)该任务发生了阻塞 (2)该任务计算时间过长或有个更高级的程序替代它 ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态 注意点1 第二种情况本质上并不能提高效率,只是为了cpu能雨露均沾,实现看起来所有任务被“同时”执行,如果多个任务是纯计算的,单纯的切换反而会降低效率。 1.2 yield实现并发 我们通过yield验证,yield本身就是一种在单线程下可以保存任务运行状态的方法,我们来简单复习一下: #1 yiled可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级 #2 send可以把一个函数的结果传给另外一个函数,以此实现单线程内程序之间的切换 yield实现并发的缺点: (1

Python 网络编程操作TCP/UDP 初探(一)

社会主义新天地 提交于 2019-11-29 13:15:05
服务器与客户端之间通信模式: 我觉得这个举例是很恰当的。将服务器->客服总线,客户端->客户,新的客户端->客服代表。 客服总线比如说400-xxxxxx这类的电话,一直处于等待状态,当有新的客户来电之后,总线接线员接到电话后,将客户的电话切换给客服代表进行处理。这样空出主线,以便总线接线员可以继续等待新的客户电话。而此时之前接入的客户及对应的客服代表,能够进行他们自己独立的谈话。当有新的客户B进来之后,总线接线员会创建一个新的客服代表进行处理,总线接线员继续进行等待。 接下来我们直接开始撸 1.TCP连接 TCP服务器端: from socket import * from time import ctime HOST = '' # 对bind方法的标识,标识可以使用任何可用的地址 PORT = 21567 # 随机设置的端口号 BUFSIZE = 1024 # 缓冲区大小1KB ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) # 分配TCP服务器套接字 tcpSerSock.bind(ADDR) # 将套接字绑定到服务器地址 tcpSerSock.listen(5) # 开启TCP监听器 while True: print 'waiting fo connection...' # 无限循环中

高性能socket设计实现

半世苍凉 提交于 2019-11-29 11:14:05
因为学习的需要,要求一个高性能的Socket服务器来提供多而繁杂的客户端连接请求,参考了许多资料和各位的思想,自己琢磨出了一套方案,觉的可行,于是拿出来晒晒,希望大家一起学习改进。(这个方案的1.0版本已经贴出来了,但是由于本人觉的1.0不太完美,做了下改进,本篇讲的主要是2.0) 1.0的文章参考: http://www.cnblogs.com/niuchenglei/archive/2009/07/23/1529462.html 1.0和2.0性能上基本没有变化,只是针对某些地方做了改进性的修改,本篇主要介绍原理,并贴出部分代码,上一篇是一个Overview。 设计原则: 使用.net的SocketAsyncEventArgs(原因是这个比较简单,而且性能也很好,当然要是c++的话就用IOCP了)。考虑到能快速的反应用户的连接请求我采用了连接池的技术,类似于sqlserver的连接池,当然我的“池”还不够好,为了能快速的处理接受的数据我又加入了一个缓冲区池,说白了就是给每一个连接对象事先开辟好了空间。在传输方面,为了保证数据的有效性我们采用客户端和服务器端的验证(当然也不是太复杂)。 具体分析: 分析的顺序是自底向上的 1.MySocketAsyncEventArgs类:这个类是一个继承自System.Net.Socket.SocketAsyncEventArgs类