Python的网络编程[0] -> socket[1] -> socket 模块
socket
1. 常量 / Constants
AF_* 和 SOCK_* 分别属于 AddressFamily 和 SocketType
1.1 AF_*类常量
- socket.AF_UNIX: UNIX本地通信使用
- socket.AF_INET: IPv4连接时使用
- socket.AF_INET6: IPv6连接时使用
这类常量代表了AddressFamily,用于socket()的第一个参数
1.2 SOCK_*类常量
- socket.SOCK_STREAM: 有保障传输面向连接的socket,基于TCP
- socket.SOCK_DGRAM: 无保障传输面向消息的socket,基于UDP
- socket.SOCK_RAW: 原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用较为不方便,主要用于一些协议的开发。
- socket.SOCK_RDM:
- socket.SOCK_SEQPACKET:
这类常量代表了 socket 的类型,常用于 socket() 的第二个参数。
SOCK_STREAM 为有保障传输,能保障数据正确传送到对方,面向连接的socket,多用于资料传送,是数据流,一般是TCP/IP协议的编程;
SOCK_DGRAM 为无保障传输面向消息,主要用于网络上发广播信息,是数据包,是 UDP 协议网络编程。
2. 函数 / Function
2.1 inet_aton()函数
函数调用: packed_ip = socket.inet_aton(addr)
函数功能: 将字符串类型的IP地址转换成32位packed二进制格式
传入参数: addr
addr, string类型,IP地址的字符串,‘123.45.67.89’格式
返回参数: packed_ip
packed_ip, bytes类型,加码后的IP地址
2.2 inet_ntoa()函数
函数调用: addr = socket.inet_ntoa(packed_ip)
函数功能: 将32位packed二进制格式的IP地址转换成字符串类型
传入参数: packed_ip
packed_ip, bytes类型,加码的IP地址
返回参数: addr
addr, str类型,IP地址的字符串,‘123.45.67.89’格式
3. 类 / Class
3.1 socket()类
类实例化:instance = socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
类的功能: 用于建立套接字socket
传入参数: family, type, proto, fileno
family: 内建常数,代表地址族,对于socket底层为int
type: 内建常数,代表数据类型,对于socket底层为int
proto: int类型
fileno: NoneType类型
返回参数: instance
3.1.1 bind()方法
函数调用: instance.bind(address)
函数功能:用于服务端对指定的地址进行绑定
传入参数: address
address: tuple类型,包含IP和端口,address = (ip, port)
返回参数: 无
3.1.2 connect()方法
函数调用: instance.connect(address)
函数功能: 用于客户端对指定的地址进行连接
传入参数: address
address: tuple类型,包含IP和端口,address = (ip, port)
返回参数: 无
3.1.3 listen()方法
函数调用: instance.listen(num)
函数功能: 用于设置服务端的最大监听数量
传入参数: num
num, int类型
返回参数: 无
3.1.4 accept()方法
函数调用: new_socket, address = instance.accept()
函数功能: 用于服务端对尝试连接的客户端进行接收,并返回新的通信socket和地址
传入参数: address
address, tuple类型,包含IP和端口,address = (ip, port)
返回参数: new_socket, address
new_socket: object类型,为新的通信实例,用于与连接的客户端进行通信,address: tuple类型,为连接的信息,包含IP和端口,address = (ip, port)
3.1.5 send()方法
函数调用: instance.send(msg)
函数功能: 用于(TCP)数据的发送
传入参数: msg
msg, bytes类型,可通过string.encode(‘utf-8’)或者bstring转换得到
返回参数: 无
3.1.6 recv()方法
函数调用: data = instance.recv(bufSize)
函数功能: 用于(TCP)数据的发送
传入参数: bufSize
bufSize, int类型,代表最大传输数据,通常可取1024,不宜超过4096
返回参数: data
data, bytes类型,为返回数据,可通过data.decode(‘utf-8’)解码
3.1.7 sendto()方法
函数调用: instance.sendto(msg, addr)
函数功能: 用于(UDP)数据的发送
传入参数: msg, addr
msg, bytes类型,可通过string.encode(‘utf-8’)或者bstring转换得到
addr, tuple类型,包含目标IP和端口,address = (ip, port)
返回参数: 无
3.1.8 recvfrom()方法
函数调用: data, addr = instance.recvfrom(bufSize)
函数功能: 用于(UDP)数据的发送
传入参数: bufSize
bufSize, int类型,代表最大传输数据,通常可取1024,不宜超过4096
返回参数: data, addr
data, bytes类型,为返回数据,可通过data.decode(‘utf-8’)解码
addr, tuple类型,包含发送者的IP和端口,address = (ip, port)
3.1.9 setsockopt()方法
函数调用: instance.setsockopt(level, option, value)
函数功能: 用于设置socket的各项功能,
|
选项 |
类型 |
意义 |
|
SO_BROADCAST |
BOOL |
允许套接口传送广播信息 |
|
SO_REUSEADDR |
BOOL |
允许套接口和一个已在使用中的地址捆绑 |
|
SO_DEBUG |
BOOL |
记录调试信息 |
|
SO_DONTLINER |
BOOL |
不要因为数据未发送就阻塞关闭操作。设置本选项相当于将SO_LINGER的l_onoff元素置为零 |
|
SO_DONTROUTE |
BOOL |
禁止选径;直接传送 |
|
SO_KEEPALIVE |
BOOL |
发送“保持活动”包 |
|
SO_LINGER |
如关闭时有未发送数据,则逗留 |
|
|
SO_OOBINLINE |
BOOL |
在常规数据流中接收带外数据 |
|
SO_RCVBUF |
INT |
为接收确定缓冲区大小 |
|
SO_SNDBUF |
INT |
指定发送缓冲区大小 |
|
TCP_NODELAY |
BOOL |
禁止发送合并的Nagle算法 |
传入参数: level, option, value
level, SOL_SOCKET和IPPROTO_TCP两种层次,分别表示Socket属性和TCP属性
option, 各类设置项
value, 设置项的选项值
返回参数: 无
4. 相关阅读
5. 参考链接
https://zhidao.baidu.com/question/127548969.html
http://blog.csdn.net/sinat_28494049/article/details/46006233
http://blog.csdn.net/youxiazzz12/article/details/25634143
http://www.cnblogs.com/wdpp/archive/2010/10/27/2386873.html
Python的网络编程[0] -> socket[1] -> socket 模块的更多相关文章
- Python的网络编程[0] -> socket[0] -> socket 与 TCP / UDP
Socket socket 简述 / socket Abstract 网络进程通信与 socket 网络中进程之间如何通信,首要解决的问题是如何唯一标识一个进程,否则通信无从谈起.在本地可以通过进程 ...
- Python的网络编程[0] -> socket[2] -> 利用 socket 建立 TCP/UDP 通信
Socket 目录 socket 的 TCP/IP 通信基本建立过程 socket 的 UDP 通信基本建立过程 socket 的 UDP 广播式通信基本建立过程 socket 的多线程通信建立过程 ...
- python之网络编程(概述及SOCKET)
概述(TCP/IP协议是一个协议族): TCP/IP 协议按照四层怎么划分:链路层,网络层,传输层,应用层(实际上是四层) TCP/IP 协议按照七层怎么划分:物理层,数据链路层,网络层,传输层,会话 ...
- 网络编程:Http通信与Socket通信
http://note.youdao.com/share/?id=f14d304548003f65e34255d3ddf9df31&type=note 网络编程:Http通信与Socket通信 ...
- python之网络编程
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...
- Python高级网络编程系列之第一篇
在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...
- python基础网络编程--转
python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...
- python 基础网络编程2
python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...
- python 基础网络编程1
python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...
随机推荐
- 剑指Offer - 九度1522 - 包含min函数的栈
剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测 ...
- 《Cracking the Coding Interview》——第18章:难题——题目7
2014-04-29 03:05 题目:给定一个词典,其中某些词可能能够通过词典里其他的词拼接而成.找出这样的组合词里最长的一个. 解法:Leetcode上有Word Break这道题,和这题基本思路 ...
- python学习笔记四:lambda表达式和switch
一.定义 lambda arg1,arg2... : returnValue 二.示例 #!/usr/bin/python def f(x,y): return x*y print f(2,3) g ...
- h5布局之道(最终篇)
大家好,时隔一年多了,前几篇探讨的rem布局后来又有改进不过一直没有想起来更新博客,rem布局淘宝用的也比较早,有兴趣的可以看看淘宝的flexible ,我的用法比较简单,原来一样,废话不说了直接上代 ...
- C++文件操作(转)
C++文件操作(转) 第一个:简单,容易理解,常用:http://www.cnblogs.com/uniqueliu/archive/2011/08/03/2126545.html 第二个:详细的,如 ...
- NOIP2018 集训(一)
A题 Simple 时间限制:1000ms | 空间限制:256MB 问题描述 对于给定正整数\(n,m\),我们称正整数\(c\)为好的,当且仅当存在非负整数\(x,y\)使得\(n×x+m×y=c ...
- 牛客网暑期ACM多校训练营(第一场):J-Different Integers(分开区间不同数+树状数组)
链接:J-Different Integers 题意:给出序列a1, a2, ..., an和区间(l1, r1), (l2, r2), ..., (lq, rq),对每个区间求集合{a1, a2, ...
- 指定user镜像安装的磁盘
ironic node-update <node uuid> add properties/root_device='{"name":"/dev/sdb&qu ...
- iOS CGContextRef 画一条直线,仅仅是画一条直线
今天周末休息,想好好补补课,无奈,弄了一上午,全部都是半边拉块的demo,有一种深深的挫败感. 中午睡醒一觉后,又看了一集“奔跑吧兄弟”,然后一下午时间就过去了. 仔细一想,应该是我的补课方法不对:要 ...
- 【Luogu】P4284概率充电器(概率树形DP)
题目链接 这题好神啊…… 设f[i]为i没电的概率,初始化$f[i]=1-q[i]$ 之后x的电有三个来源: 1.x自己有电 2.x的儿子给它传来了电 3.x的父亲给它传来了电 对于2和3操作分别做一 ...