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. 相关阅读


1. socket 与 TCP/UDP

2. 利用 socket 建立 TCP/UDP 通信

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 模块的更多相关文章

  1. Python的网络编程[0] -> socket[0] -> socket 与 TCP / UDP

    Socket socket 简述 / socket Abstract 网络进程通信与 socket 网络中进程之间如何通信,首要解决的问题是如何唯一标识一个进程,否则通信无从谈起.在本地可以通过进程 ...

  2. Python的网络编程[0] -> socket[2] -> 利用 socket 建立 TCP/UDP 通信

    Socket 目录 socket 的 TCP/IP 通信基本建立过程 socket 的 UDP 通信基本建立过程 socket 的 UDP 广播式通信基本建立过程 socket 的多线程通信建立过程 ...

  3. python之网络编程(概述及SOCKET)

    概述(TCP/IP协议是一个协议族): TCP/IP 协议按照四层怎么划分:链路层,网络层,传输层,应用层(实际上是四层) TCP/IP 协议按照七层怎么划分:物理层,数据链路层,网络层,传输层,会话 ...

  4. 网络编程:Http通信与Socket通信

    http://note.youdao.com/share/?id=f14d304548003f65e34255d3ddf9df31&type=note 网络编程:Http通信与Socket通信 ...

  5. python之网络编程

    本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...

  6. Python高级网络编程系列之第一篇

    在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...

  7. python基础网络编程--转

    python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...

  8. python 基础网络编程2

    python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...

  9. python 基础网络编程1

    python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...

随机推荐

  1. 《数据结构与算法分析:C语言描述》复习——第七章“哈希”——哈希表

    2014.06.22 12:36 简介: 哈希是一种数学思想,将不定长数据通过函数转换为定长数据.不定长数据通常意味着碎片化,动态分配内存等等影响存储和性能的因素.当这个定长数据是一个无符号整数时,可 ...

  2. python学习笔记十三:Flask demo

    一.Flask简介 Flask 是一个 Python 实现的 Web 开发微框架.官网:http://flask.pocoo.org/ 二.Demo 1.代码结构 . ├── blog.py ├── ...

  3. 【APUE】Chapter12 Thread Control

    今天看了APUE的Chapter12 Thread Control的内容,记录一下看书的心得与示例code. 这一章的内容是对Chapter11 Threads(见上一篇日志)的补充,大部分内容都是理 ...

  4. [译]如何去除pandas dataframe里面的Unnamed的列?

    原文来源: https://stackoverflow.com/questions/43983622/remove-unnamed-columns-in-pandas-dataframe 问:我有一个 ...

  5. GDI+绘制可滚动的窗口

    在winform中绘制图形,可以使用gdi+来完成. 当绘制的图形大于目前窗口大小时,就需要滚动条来帮忙显示. 设置属性:Form.AutoScrollMinSize为要显示内容的大小. privat ...

  6. mssql 格式化字符串 /时间 年月日时分秒

    比如:1 想格式化 000001,100 格式化为000100: 思路是这样的 1000000 +格式化的数字 取后6位: select   right(cast(power(10,6) as var ...

  7. vue1和vue2获取dom元素的方法

    vue1.*版本中 在标签中加上el='dom',然后在代码中this.$els.dom这样就拿到了页面元素 例如:<div class='box' v-el: myBox>你好</ ...

  8. 熊猫(i)

    题目描述 熊猫喜欢吃数,熊猫对与每个数都有他独特的评价.具体来说,熊猫对数 xx 的评价是个四元组 (a, b, c, d)(a,b,c,d),计算方式如下: 首先将 xx 写成二进制形式(不含前导零 ...

  9. css实现0.5像素

    .border{ position: relative; } .border:before{ content: ''; position: absolute; width: 200%; height: ...

  10. TCP面试题之滑动窗口原理

    TCP 滑动窗口 作用: 1. 提供TCP可靠性:对发送的数据进行确认 2. 流量控制:窗口大小随链路变化 一.TCP窗口机制 TCP中窗口大小是指tcp协议一次传输多少个数据.因为TCP是一个面向连 ...