python标准库之【socket】
socket通常也称作”套接字“。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket 是网络连接端点。例如当你的Web浏览器请求www.fishc.com上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.fishc.com的Web服务器主机,Web服务器也对来自的请求在一个socket上进行监听。两端使用各自的socket来发送和 接收信息。
socket模块提供了几个函数用于使用主机名和地址来工作: gethostname() 返回运行程序所在的计算机的主机名:
- #>>> import socket
- #>>> socket.gethostname()
- #'李嘉图的计算机'
- #>>>
复制代码
gethostbyname(name) 尝试将给定的主机名解释为一个IP地址
- #>>> #socket.gethostbyname('www.fishc.com')
- #'101.37.44.185'
- #>>> socket.gethostbyname('李嘉图的计算机')
- #'192.168.1.104'
- #>>>
复制代码
ps:首先将检查当前计算机是否能够解释。如果不能,一个解释请求将发送给一个远程的DNS服务器(远程的DNS服务器 还可能将解释请求转发给另一个DNS服务器,直到该请求可以被处理)。gethostbyname函数返回这个IP地址或在查找失败后引发一个异常。 拓展; gethostbyname_ex(name)返回一个包含三个元素的元组 : (给定地址的主要的主机名,同一IP地址的可选的主机名的一个列,同一主机的同一接口的其它IP地址的一个列表)
- >>> #>>>socket.gethostbyname_ex('www.fishc.com')
- #('bbgaws7ldwotai4akucb7ckfsnvzoz6m.aliyunwaf.com', ['www.fishc.com'], ['101.37.44.185'])
复制代码
gethostbyaddr(address)函数的作用与gethostbyname_ex相同,只是你提供给它的参数是一个IP地址字符串
getservbyname(service,protocol)函数要求一个服务名(如'telnet'或'ftp')和一个协议(如'tcp'或'udp'),返回服务所使用的端口号:
- #>>>socket.getservbyname('http','tcp')
- #80
- #>>>socket.getservbyname('telnet','tcp)
- #23
复制代码
socket通信 import socket
1. socket()
- 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对象,
示例:
- sk = socket.socket()
- address = ('127.0.0.1',9080)
- sk.bind(address)
- sk.listen(5)
- conn,addr = sk.accept()
- print(sk)
- print(conn)
- print(addr)
- 输出结果:
- <socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9080)>
- <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)>
- ('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模块进行通信 服务端:
- sk = socket.socket()
- address = ('127.0.0.1',9080)
- sk.bind(address)
- sk.listen(5)
- conn,addr = sk.accept()
- data = conn.recv(1024)
- print(str(data,'utf8'))
复制代码
客户端:
- sk = socket.socket()
- address = ('127.0.0.1',9080)
- sk.connect(address)
- inp = input('>>')
- sk.send(bytes(inp,'utf8'))
复制代码

python标准库之【socket】的更多相关文章
- (转)python标准库中socket模块详解
python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...
- python标准库中socket模块详解
包含原理就是tcp的三次握手 http://www.lybbn.cn/data/datas.php?yw=71 这篇讲到了socket和django的联系 https://www.cnblogs.co ...
- python标准库 - socket
地址簇(address family) socket.AF_UNIX # (UNIX Domain Sockets) socket.AF_INET # ipv4 socket.AF_INET6 # i ...
- python标准库00 学习准备
Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...
- Python标准库的学习准备
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准 ...
- Python标准库——走马观花
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一套很有用的标准库(standard library).标准库会随着 ...
- Python 标准库 urllib2 的使用细节[转]
转自[http://zhuoqiang.me/python-urllib2-usage.html] Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比 ...
- Python 标准库 urllib2 的使用细节
刚好用到,这篇文章写得不错,转过来收藏. 转载自 道可道 | Python 标准库 urllib2 的使用细节 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节 ...
- Python 标准库 urllib2 的使用细节(转)
http://www.cnblogs.com/yuxc/archive/2011/08/01/2123995.html http://blog.csdn.net/wklken/article/deta ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
随机推荐
- BZOJ4245 [ONTAK2015]OR-XOR 【贪心】
题目链接 BZOJ4245 题解 套路① 位运算当然要分位讨论,高位优先 考虑在\(or\)下,如果该位为\(0\),则每一位都为\(0\) 套路② 我们选m段异或和,转化为\(m\)个前缀和的点,且 ...
- poj:1850 Code(组合数学?数位dp!)
题目大意:字符的字典序依次递增才是合法的字符串,将字符串依次标号如:a-1 b-2 ... z-26 ab-27 bc-52. 为什么题解都是组合数学的...我觉得数位dp很好写啊(逃 f[pos][ ...
- 《python核心编程》读书笔记--第18章 多线程编程
18.1引言 在多线程(multithreaded,MT)出现之前,电脑程序的运行由一个执行序列组成.多线程对某些任务来说是最理想的.这些任务有以下特点:它们本质上就是异步的,需要多个并发事务,各个事 ...
- selenium测试-open chrome
通过selenium来打开浏览器测试之前,需要确认本地已安装相应的webdriver,本例以chrome为例. 1. 查看本地chrome版本,以此确认需要安装的webdriver版本 查看chrom ...
- Codeforces Round #344 (Div. 2) B
B. Print Check time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- google 浏览器的调试模式
1.电脑模式: 而在手机模式下的调试是:
- bzoj 2434 [Noi2011]阿狸的打字机 AC自动机
[Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4001 Solved: 2198[Submit][Status][D ...
- bzoj2428 [HAOI2006]均分数据 模拟退火
[HAOI2006]均分数据 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 3434 Solved: 1091[Submit][Status][Dis ...
- [LeetCode] 递推思想的美妙 Best Time to Buy and Sell Stock I, II, III O(n) 解法
题记:在求最大最小值的类似题目中,递推思想的奇妙之处,在于递推过程也就是比较求值的过程,从而做到一次遍历得到结果. LeetCode 上面的这三道题最能展现递推思想的美丽之处了. 题1 Best Ti ...
- DBA操作常用命令
一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 orac ...