socket

day35 python socket 单线程的并发 io多路复用 协程 greenlet模块 gevent模块

不想你离开。 提交于 2020-01-22 18:25:02
day35 python socket 单线程的并发 io多路复用 协程 greenlet模块 gevent模块 一.socket相关 1.socket: 所有的网络请求都是基于socket实现的,默认是阻塞的 2.requests是用的socket的客户端 3.socket到底哪端(谁)发生了变化 如果客户端向服务端发起连接时, 则服务端发生了变化 如果服务端向客户端发送数据时, 则客户端发生了变化 conn,addr = server.accept() conn.recv() 4.如果想要提高并发(目前有以下两种) 多进程: 计算密集型 多线程: io密集型,如socket请求 二.单线程的并发 需求: 模拟浏览器发送请求: 向百度发送请求搜索三个关键词 1.单线程(串行): 使用requests模块 import requests key_list = ['bajie','wukong','datang'] for item in key_list: ret = requests.get( url="https://www.baidu.com/s?wd=%s" % (item,), headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox

Socket——NAT穿透解决方案:UDP打洞

守給你的承諾、 提交于 2020-01-22 16:03:25
目标 路由穿透,实现广域网P2P通讯。 4种典型NAT类型 按照NAT设备在进行地址映射时行为的不同,NAT可以分为以下四种: Full Cone Restricted Cone Port Restricted Cone Symmentric 目前主要的NAT类型有如下几种: 1)Full-cone NAT, also known as one-to-one NAT 一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eAddr:ePort), 来自 iAddr:iPort 的任何数据包将通过 eAddr:ePort 发送. 任何外部主机能够通过eAddr:ePort这个地址发送数据包到iAddr:iPort. 2)Address-restricted-cone NAT 一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eAddr:ePort), 来自 iAddr:iPort 的任何数据包将通过 eAddr:ePort 发送. 仅只有接收到主机(iAddr:iPort)通过eAddr:ePort发送的数据包的外部主机通过该主机的任何端口发送到eAddr:ePort的数据包才能够被正确的转发到iAddr:iPort.也就是说主机有关端口无关. 3)Port-restricted cone NAT 类似于address restricted

Socket的使用

帅比萌擦擦* 提交于 2020-01-22 04:00:33
文章目录 什么是Socket Socket的初始化方式 Socket参数配置 Socket核心方法 ServerSocket的初始化方式 ServerSocket常用方法 示例 什么是Socket Socket也称为"套接字",是网络通信中的概念,是支持TCP/IP协议的网络通信的基本操作单元。它分为流式套接字和用户数据报套接字两种,分别对应于传输层的TCP和UDP协议。TCP协议是一种面向连接的、可靠的、基于字节流的传输层协议,由IETF的RFC793定义。 Socket包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。 Socket的初始化方式 Socket的初始化用在客户端中,这里介绍几种初始化方式 1.无代理模式创建 //等效于空构造函数 Socket socket = new Socket ( Proxy . NO_PROXY ) ; 2.使用HTTP代理的方式 // 新建一份具有HTTP代理的套接字,传输数据将通过www.baidu.com:8080端口转发 Proxy proxy = new Proxy ( Proxy . Type . HTTP , new InetSocketAddress ( Inet4Address . getByName ( "www.baidu.com" ) ,

python3 socket 超时设置

情到浓时终转凉″ 提交于 2020-01-22 02:41:47
针对链接(connect)时候的超时: # 法一: import socket socket.setdefaulttimeout(5) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.sendall('xxx') sock.recv(1024) sock.close() ''' 20160716 update socket.setdefaulttimeout(5) 此句必须放到建立链接的前面,否则超时设置无效果 ''' # 法二: import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5) sock.connect((host, port)) # 恢复默认超时设置,设置某些情况下socket进入阻塞模式(如makefile) sock.settimeout(None) sock.connect((host, port)) sock.sendall('xxx') sock.recv(1024) sock.close() 针对接收(recv)数据时的超时: # 法一: import socket socket

socket服务器集成模块

巧了我就是萌 提交于 2020-01-22 01:15:27
python2 SocketServer python3 socketserver 1.功能: 通过模块的接口完成基于多进程/多线程的tcp/udp的socket并发程序 2.模块类: DatagramRequestHandler 处理udp请求 StreamRequestHandler 处理tcp请求 UDPServer 提供udp服务端类 TCPServer 提供tcp服务端类 ForkingMixIn 提供进程创建 ForkingTCPServer <—> ForkingMixIn + TCPServer ForkingUDPServer <—> ForkingMixIn + UDPServer ThreadingMixIn 提供线程创建 ThreadingTCPServer <—> ThreadingMixIn + TCPServer ThreadingUDPServer <—> ThreadingMixIn + UDPServer 四种并发: 进程tcp并发 ‘ForkingMixIn’,‘TCPServer’,‘StreamRequestHandler’, 进程udp并发 ‘ForkingMixIn’,‘UDPServer’,‘DatagramRequestHandler’, 线程tcp并发 ‘ThreadingMixIn’,‘TCPServer’,

网络编程——网络基础(二)

旧街凉风 提交于 2020-01-22 01:09:53
Socket是何方妖怪? 1.socket与进程的关系 1).socket与进程间的关系:socket 用来让一个进程和其他的进程互通信息(IPC),而Socket接口是TCP/IP网络的API接口函数。 2).进程间通信(本机内) 进程间通信(不同计算机,要联网) 2、socket与文件的关系——如何理解socket是种特殊的I/O? 1)Socket最先应用于Unix操作系统,如果了解Unix系统的I/O的话,就很容易了解Socket了,因为Socket数据传输其实就是一种特殊的I/O。 2)可对其进行文件操作 3)有文件描述符。而文件描述符的本质是一个非负整数。只是用于区分。类似的还有进程ID。 3.服务器端口与连接个数的关系 1)服务端在8088上监听,然后生成一个新的socket与client通讯。(注意:服务器端监听端口是 不变的,但socket连接可以一直生成,一个线程对应一个socket.) 同一时刻,一个端口只能建立一个连接。 在一个端口监听,但是在监听端口的同时,生成一个等待队列,每一个来自客户端的连接都会送入等待队列中,服务器利用一定的算法进行选择相应的连接请求处理,所以在一个端口可以监听多各请求嘛。如果同时的连接过多,服务器相应每个连接的时间就会相应的变长。就会变慢。 2)QQ的实现方法就是在登陆的时候告诉服务器你已经登陆,发送消息的时候

web表达三剑客之html

微笑、不失礼 提交于 2020-01-22 00:50:15
一.web入门之html 1.html小试牛刀 电脑做client,浏览器做server,进行bs通信;原理与之前的电脑自建client和server相似,server和client进行cs通信。 import socket def main(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.bind(('localhost',8080)) sock.listen(5) while True: connection,address = sock.accept() buf = connection.recv(1024) connection.sendall(bytes("HTTP/1.1 201 OK\r\n\r\n","utf8")) connection.sendall(bytes("<h1>hello world</h1>","utf8")) connection.close() if __name__ == "__main__": main() 不同标题的前端表示 connection.sendall(bytes("<h1>hello world1</h1> <h2>hello world2</h2> <h3>hello world3</h3> <h4>hello world4</h4>",

文件上传案例的客户端

妖精的绣舞 提交于 2020-01-21 23:51:23
package com.learn.demo02.FileUpload; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; /* 文件上传案例的客户端:读取本地文件,上传到服务器,读取服务器回写的数据 明确: 数据源:c:\\1.jpg 目的地:服务器 实现步骤: 1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源 2.创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号 3.使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象 4.使用本地字节输入流FileInputStream对象中的方法read,读取本地文件 5.使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器 6.使用Socket中的方法getInputStream,获取网络字节输入流InputStream对象 7.使用网络字节输入流InputStream对象中的方法read读取服务回写的数据 8.释放资源(FileInputStream

java 网络编程

三世轮回 提交于 2020-01-21 21:31:15
在现实中,我们通过统一的度量,规定标准来约束大家的生活方方面面,而在虚拟的,我们也必须有这样的一套度量衡来平衡网络世界,这时候我们就用到了协议,其中TCP协议和UDP协议则是最常见的。 java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。 UDP:UDP 是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。 本教程主要讲解以下两个主题。 Socket 编程:这是使用最广泛的网络概念,它已被解释地非常详细。 URL 处理:这部分会在另外的篇幅里讲,点击这里更详细地了解在 Java 语言中的 URL 处理。 Socket Socket又被称之为套接字,我们可将其比喻为生活中的插座,当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。 java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。 以下步骤在两台计算机之间使用套接字建立TCP连接时会出现: 服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。 服务器调用

网络编程知识总结

流过昼夜 提交于 2020-01-21 18:56:55
网络编程 1、概述 计算机网络: 计算机网络是指将 地理 位置不同的具有独立功能的多台 计算机 及其外部设备,通过通信线路连接起来,在 网络操作系统 , 网络管理软件 及 网络通信协议 的管理和协调下,实现 资源共享 和信息传递的计算机系统。 网络编程目的: 无限电台、传播交流信息、数据交换、通信...... 想要达到这个效果需要什么: 如何准确的定位网络上的一台主机 ip地址:端口,定位到这个计算机上的某个资源 找到了这个主机,如何传输数据? 概念B/S与C/: javaweb: 网页编程 B/S 网络编程:TCP/IP C/S 2、网络通信的要素 如何实现网络的通信? 通信双方的地址: ip:端口 规则:网络通信协议 TCP/IP参考模型: 小结: 网络编程中的两个主要问题: 如何准确的定位到网络上的一台或者多台主机 找到主机之后如何进行通信 网络编程中的要素: IP和端口号 IP 网络通信协议 UDP、TCP 万物皆对象: 在java中一定存在与网络通信相关的类 没有的类需要自己进行相关的定义 3、IP ip地址:InetAdress 唯一定位一台网络上的计算机 127.0.0.1:本机地址 即localhost ip地址的分类 ipv4/ipv6 IPV4:4个字节组成。约42亿,北美占了30亿,亚洲4亿,2011年已经用完 IPV6:12位。8个无符号整数,例如 1111