套接字名与DNS
2 现代地址解析
首先要说Python套接字最强大的工具之一-------getaddrinfo()
这个函数可能是我们用来将用户指定的主机名和端口号转换为可供套接字方法使用的地址时所需的唯一方法。
getaddrinfo()提供的方法很简单,我们能够在一个调用中指明要创建的连接所需的一切已知信息。
该方法返回之前讨论过的全部坐标,这些坐标是创建并将套接字连接至目标地址所必须的。
>>> from pprint import pprint
>>> infolist = socket.getaddrinfo('gatech.edu','www')
>>> pprint(infolist)
[(2,1,6,'',('130.207.244.244',80)),
(2,2,17,'',(,130.207.244.244',80))]
>>> info = infolist[0]
>>> info[0:3]
(2,1,6)
>>> s = socket.socket(*info[0:3])
>>> info[4]
('130.207.244.244',80)
>>> s.connect(info[4])
注意:pprint模块与网络操作无关,只不过他在打印元祖列表是比标准的print函数效果好
info变量包含了连接所需的所有信息,他提供了地址族,类型,协议,规范名称以及地址信息。
2.1 使用getaddrinfo()为服务器绑定端口
当我们指明想支持的服务,然后通过getaddrinfo()的返回值得到多个可用的地址时,应怎么做?当然无法通过bind()将创建的单个套接字绑定到多个地址。这个问题将在7异步服务器解决。
套接字名与DNS的更多相关文章
- 套接字和域名系统DNS
套接字产生的原因: 当应用进程通过传输层进行通信时 ,TCP和 UDP将面临同时为多个应用进程提供并行通信的问题.多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据. 为了区别每 ...
- 《Unix网络编程》卷一(简介TCP/IP、基础套接字编程)
通常说函数返回某个错误值,实际上是函数返回值为-1,而全局变量errno被置为指定的常值(即称函数返回这个错误值). exit终止进程,Unix在一个进程终止时总是关闭该进程所有打开的描述符. TCP ...
- 网络IPC:套接字之寻址
在学习用套接字做一些有意义的事情之前,需要知道如何确定一个目标通信进程. 进程的标识有两个部分:计算机的网络地址可以帮助标识网络上想与之通信的计算机,而服务可以帮助标识计算机上特定的进程. 1.字节序 ...
- linux学习笔记之套接字
一.基础知识. 1:套接字基础. 1,是通信端点的抽象. 2,在UNIX类系统中被当作是一种文件描述符. 3,套接字通信域. 域 描述 AF_INET IPV4因特网域 AF_INET6 IPV6因特 ...
- Linux编程---套接字
网络相关的东西差点儿都是建立在套接字之上.所以这个内容对于程序猿来说还是蛮重要的啊. 事实上套接字也就是一个特殊的设备文件而已,我始终不能明确为什么要叫套接字.这么个奇怪的名字.只是还是就这样算了吧. ...
- JavaTCP和UDP套接字编程
在我们刚开始入门Java后端的时候可能你会觉得有点复杂,包含了很多杂七杂八的知识,例如文件上传下载,监听器,JDBC,请求重定向,请求转发等等(当然也没有很多),但是我们自己真正的去开发一个小型网站( ...
- HTTP一、HTTP介绍与套接字
目录 一.套接字 1.HTTP与Apache 2.应用层协议:HTTP 3.套接字(IP+协议端口的组合) 4.套接字图示 5.套接字相关知识点 二.HTTP 一.套接字 1. ...
- 网络编程初识和socket套接字
网络的产生 不同机器上的程序要通信,才产生了网络:凡是涉及到倆个程序之间通讯的都需要用到网络 软件开发架构 软件开发架构的类型:应用类.web类 应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌 ...
- TCP和UDP套接字编程 (java实现)
在了解网络编程之前,我们先了解一下什么叫套接字 套接字即指同一台主机内应用层和运输层之间的接口 由于这个套接字是建立在网络上建立网络应用的可编程接口 因此也将套接字称为应用程序和网络之间的应用程序编程 ...
随机推荐
- 纯css 实现大白
首先是用html 语言来搭建框架 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- gcc 命令详解
1. gcc -E source_file.c-E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_file.c -S,只执行到源代码到汇编代码的转换,输出汇编代码. 3. g ...
- 【python小随笔】动态创建变量名
PS:有时候我们不知道列表组数里存放几个值,但是又要动态的遍历这些值并且动态的创建每一个对应的一个变量里: t = ['B0716PK6R2','B077X9J24C','B01N2SBH4J'] c ...
- 【转】python及其工具包安装基本流程
昨天晚上在家里的旧电脑上安装了<利用python进行数据分析>的部分环境,遇到若干问题,在此予以记录. 部分细节转:http://blog.csdn.net/huanbia/article ...
- python继承简介
继承 是面向对象的三大特性之一 作用: 通过继承可以使一个类获取其它类中的属性和方法 使用方法: 在定义类时,可以在类名后的括号中指定当前类的父类(超类.基类.super) 这样子类(衍生类)就可以直 ...
- Spring Boot2 系列教程 (十一) | 整合数据缓存 Cache
如题,今天介绍 SpringBoot 的数据缓存.做过开发的都知道程序的瓶颈在于数据库,我们也知道内存的速度是大大快于硬盘的,当需要重复获取相同数据时,一次又一次的请求数据库或者远程服务,导致大量时间 ...
- Nginx作为静态web服务器——缓存原理
浏览器缓存 客户端无缓存的情况下 客户端有缓存的情况下 校验过期机制 本地客户端会检查Cache-Control(max-age)缓存是否过期,(max-age)为过期时间 Last- ...
- Docker学习(三)认识Docker和常用命令
Docker学习(三)认识Docker和常用命令 Docker体系结构 docker服务端,作为服务的提供方,核心进程 docker daemon,所有docker命令都是通过这个进程完成的 REST ...
- 获取各类前几名数据的MYSQL写法
前几天,某在培训的朋友问我一个问题:查询每门功课成绩最好的前两名该怎么写. 这个问题虽然听起来挺简单,但是很有意思,于是我就新建了一张如下的表: stuNo为学号,stuScore为分数,course ...
- vue-DevTools安装使用
方式一:通过谷歌应用商店进行安装 vue devtools 方式二:手动安装 下载https://github.com/vuejs/vue-devtools 安装 方式一:打开谷歌浏览器 点击扩展程 ...