python标准库之【socket】

socket通常也称作”套接字“。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket 是网络连接端点。例如当你的Web浏览器请求www.fishc.com上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.fishc.com的Web服务器主机,Web服务器也对来自的请求在一个socket上进行监听。两端使用各自的socket来发送和 接收信息。
socket模块提供了几个函数用于使用主机名和地址来工作:         gethostname() 返回运行程序所在的计算机的主机名:

  1. #>>> import socket
  2. #>>> socket.gethostname()
  3. #‘李嘉图的计算机‘
  4. #>>>

复制代码

gethostbyname(name) 尝试将给定的主机名解释为一个IP地址

  1. #>>> #socket.gethostbyname(‘www.fishc.com‘)
  2. #‘101.37.44.185‘
  3. #>>> socket.gethostbyname(‘李嘉图的计算机‘)
  4. #‘192.168.1.104‘
  5. #>>>

复制代码

ps:首先将检查当前计算机是否能够解释。如果不能,一个解释请求将发送给一个远程的DNS服务器(远程的DNS服务器 还可能将解释请求转发给另一个DNS服务器,直到该请求可以被处理)。gethostbyname函数返回这个IP地址或在查找失败后引发一个异常。         拓展;         gethostbyname_ex(name)返回一个包含三个元素的元组 :         (给定地址的主要的主机名,同一IP地址的可选的主机名的一个列,同一主机的同一接口的其它IP地址的一个列表)

  1. >>> #>>>socket.gethostbyname_ex(‘www.fishc.com‘)
  2. #(‘bbgaws7ldwotai4akucb7ckfsnvzoz6m.aliyunwaf.com‘, [‘www.fishc.com‘], [‘101.37.44.185‘])

复制代码

gethostbyaddr(address)函数的作用与gethostbyname_ex相同,只是你提供给它的参数是一个IP地址字符串
        getservbyname(service,protocol)函数要求一个服务名(如‘telnet‘或‘ftp‘)和一个协议(如‘tcp‘或‘udp‘),返回服务所使用的端口号:

  1. #>>>socket.getservbyname(‘http‘,‘tcp‘)
  2. #80
  3. #>>>socket.getservbyname(‘telnet‘,‘tcp)
  4. #23

复制代码

socket通信         import socket
        1. socket()

  1. socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

复制代码

(1)family = AF_INET表示服务器之间的通信。
       
        (2)fmily = AF_UNIX表示Unix不同进程间的通信。
       
        (3)type = SOCK_STREAM表示TCP连接。
       
        (4)type = SOCK_DGRAM 表示UDP连接。

ps: 2, 3, 4 方法用于服务端         2. bind()
        sk.bind(address)
        将地址与socket绑定。address(host IP,端口号),address必须是个元组。

3. listen()
        listen(backlog)
        监听客户端的连接。backlog为可选参数,表示最大等待连接数量。

4.accept()
        接受连接并返回(conn,address)。其中conn表示客户端的sk对象,        
        示例:

  1. sk = socket.socket()
  2. address = (‘127.0.0.1‘,9080)
  3. sk.bind(address)
  4. sk.listen(5)
  5. conn,addr = sk.accept()
  6. print(sk)
  7. print(conn)
  8. print(addr)
  9. 输出结果:
  10. <socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1‘, 9080)>
  11. <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1‘, 9080), raddr=(‘127.0.0.1‘, 35066)>
  12. (‘127.0.0.1‘, 35066)

复制代码

5.recv()
        sk.recv(bufsize)
        接收数据。其中bufsize表示最大可接收的数据大小。

6.connect()
        sk.connect(address)
        连接指定地址的socket。address用元组表示。

7.send()
        sk.send(data)
        将data发送给连接的socket。

8.sendall()
        与send类似,内部通过递归调用send()方法,尝试将所有数据发送出去。
        9.sendto()
        sk.sendto(data,addr)         可指定远端地址

notice!         TCP(SOCK_STREAM),需要连接到远程主机才可以发送数据,发送数据用send(b‘字符‘)         UDP(SOCK_DGRAM),不需要连接,直接发送数据,发送数据用sendto(b‘字符‘,(ip,port))        
        10.settimeout(timeout)
        设置超时。

11.getpeername()
        返回远端socket的地址(address,port)。

12.getsockname()
        返回自己的socket地址(address,port)。

13.fileno()
        套接字的文件描述符。

示例:         利用socket模块进行通信         服务端:

  1. sk = socket.socket()
  2. address = (‘127.0.0.1‘,9080)
  3. sk.bind(address)
  4. sk.listen(5)
  5. conn,addr = sk.accept()
  6. data = conn.recv(1024)
  7. print(str(data,‘utf8‘))

复制代码

客户端:

  1. sk = socket.socket()
  2. address = (‘127.0.0.1‘,9080)
  3. sk.connect(address)
  4. inp = input(‘>>‘)
  5. sk.send(bytes(inp,‘utf8‘))

复制代码

时间: 2024-10-17 09:37:51

python标准库之【socket】的相关文章

Python标准库的学习准备

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准库所涉及的应用很广,所以需要学习一定的背景知识. 硬件原理 这一部份需要了解内存,CPU,磁盘存储以及IO的功能和性能,了解计算机工作的流程,了解指令的概念.这些内容基础而重要. Python标准库的一部份是为了提高系统的性能(比如mmap),所以有必要了解基本的计算机各个组成部分的性能. 操作系统

Python 标准库 urllib2 的使用细节

转:http://www.cnblogs.com/yuxc/archive/2011/08/01/2123995.html Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 库的使用细节. 1 Proxy 的设置 2 Timeout 设置 3 在 HTTP Request 中加入特定的 Header 4 Redirect 5 Cookie 6 使用 HTTP 的 PUT

Python标准库——走马观花

Python标准库——走马观花 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一套很有用的标准库(standard library).标准库会随着Python解释器,一起安装在你的电脑中的.它是Python的一个组成部分.这些标准库是Python为你准备好的利器,可以让编程事半功倍. 我将根据我个人的使用经验中,挑选出标准库三个方面的包(package)介绍: Python增强 系统互动 网络 第一类:Pyth

[学习笔记] Python标准库的学习准备 [转]

Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准库所涉及的应用很广,所以需要学习一定的背景知识. 硬件原理 这一部份需要了解内存,CPU,磁盘存储以及IO的功能和性能,了解计算机工作的流程,了解指令的概念.这些内容基础而重要. Python标准库的一部份是为了提高系统的性能(比如mmap),所以有必要了解基本的计算机各个组成部分的性能. 操作系统 在了解操作系统时,下面是重点: 1) 操作系统的进程管理,比如什么是UID, PID, daemon 2) 进程之间

Python 标准库 BaseHTTPServer 中文翻译

Python 标准库 BaseHTTPServer 中文翻译. 注意: BaseHTTPServer模块在Python3中已被合并到http.server,当转换你的资源为 Python3 时 2to3 工具将自己主动适配导入. 源代码:Lib/BaseHTTPServer.py 此模块定义了两个类用于实现HTTP服务器(Web servers).通常,此模块不被直接使用.可是它用来作为基类创建功能性的Web servers. 查看 SimpleHTTPServer 和 CGIHTTPServe

Python标准库(机器汉化)

Python标准库 虽然"Python语言参考"描述了Python语言的确切语法和语义,但该库参考手册描述了使用Python分发的标准库.它还介绍了Python发行版中通常包含的一些可选组件. Python的标准库非常广泛,提供了下面列出的长表所示的各种设施.该库包含内置模块(用C语言编写),提供对Python程序员无法访问的系统功能(如文件I / O)的访问,以及使用Python编写的模块,为出现的许多问题提供标准化的解决方案日常编程.其中一些模块是明确设计的,通过将特定平台抽象为平

Python 标准库一览(Python进阶学习)

转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连应该用哪个类库都不知道,还要去百度(我不信就我一个人那么尴尬TvT) 好像自从学习了基础的Python 语法,看了几本Python经典的书,知道了一些常见的类库.在几本语法应用熟练的情况下,如果不做题,像是无法显著的提高自己的知识储备了(所以叫你去做python challenge啊,什么都不会~~

python标准库Beautiful Soup与MongoDb爬喜马拉雅电台的总结

Beautiful Soup标准库是一个可以从HTML/XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,Beautiful Soup将会节省数小时的工作时间.pymongo标准库是MongoDb NoSql数据库与python语言之间的桥梁,通过pymongo将数据保存到MongoDb中.结合使用这两者来爬去喜马拉雅电台的数据... Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是

Python标准库 (pickle包,cPickle包)

在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python"一切皆对象"的哲学,在Python中,无论是变量还是函数,都是一个对象.当Python运行时,对象存储在内存中,随时等待系统的调用.然而,内存里的数据会随着计算机关机和消失,如何将对象保存到文件,并储存在硬盘上呢? 计算机的内存中存储的是二进制的序列 (当然,在Linux眼中,是文本流).我们可以直接将某个对象所对应位置的数据抓取下来,转换成文本流 (这个过程叫做serialize),

Python标准库14 数据库 (sqlite3)

Python标准库14 数据库 (sqlite3) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.SQLite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具.SQLite还在其它领域有广泛的应用,比如HTML5和移动端.Python标准库中的sqlite3提供该数据库的接口. 我将创建一个简单的关系型数据库,为一个书店存