Python 构建TCP通讯
TCP/IP协议
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议 不仅仅 指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
关于Python 的TCP协议处理
老实说python在这种偏底层的网络协议处理上并不占太大优势,他的处理速度相对于C/C++或者别的什么语言来说相对较慢,但胜就胜在简单 wwwwww
使用 Python 实现tcp通讯,一般要通过 Python 的 scoket 模块来实现。
socket 是 Python 自带的源生库,大家并不需要通过 pip 进行下载,直接在代码里 import 就行了。
Python 提供的 socket 模块, 它提供了标准的 BSD Sockets API
socket 类型
先来看一看 socket 的构造器
socket.socket([family[, type[, proto]]])
class socket(_socket.socket):
"""A subclass of _socket.socket adding the makefile() method."""
__slots__ = ["__weakref__", "_io_refs", "_closed"]
def __init__(self, family=-1, type=-1, proto=-1, fileno=None):
pass
# 以下省略
family:
意义为地址族,决定 socket 的通讯类型,类型以及描述如下
| socket 地址族类型 | 地址族描述 |
|---|---|
| socket.AF_UNIX | 只能够用于单一的Unix系统进程间通讯 |
| socket.AF_INET | 服务器之间网络通讯 |
| socket.AF_INET6 | IPv6 |
type:
意义为 scoket 类型,根据不同的值构建不同的连接,类型以及描述如下
| socket 类型 | 类型描述 |
|---|---|
| socket.SOCK_STREAM | 流式的 scoket, 处理 TCP 连接选择这种 |
| socket.SOCK_DGAM | 数据报式的 socket,处理 UDP 连接选择这种 |
| socket.SOCK_RAW | 原始类型的 socket,普通的套接字无法处理 ICMP、IGMP等网络报文,而 SOCK_RAW 可以;同时,SCOK_RAW 也可以处理特殊的 IPv4 报文;利用原始 socket,可以通过 IP_HDRINCL socket选项由用户构造 IP 头。 |
| socket.SOCK_SEQPACKET | 可靠的连续数据包服务 |
protocol:
一般不填默认为 0。
socket 函数
1)与 HTTP 或 UDP 协议不一样, TCP 发送数据时,已建立好 TCP 连接,所以不需要指定地址。
2)服务端与客户端不能直接发送***字符串***外的数据类型。
3)可用函数如下
服务端函数
| socket 函数 | 函数描述 |
|---|---|
| bind(address) | 将 socket 绑定到地址,在 AF_INET 地址族方式下,以元组 (host,port) 的形式表示地址 |
| listen(backlog) | 开始监听 TCP 传入连接。bcaklog 指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为 1,在Win/MAC 系统下有效。Linux系统下默认最大值。 |
| accept() | 接受 TCP 连接并返沪 (conn, address), conn 是新的 socket对象,可以用来接受和发送数据。 address 是连接客户端的地址。 |
客户端函数
| socket 函数 | 函数描述 |
|---|---|
| connect(address) | 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。 |
| connect_ex(address) | 功能与connect(address)相同,但是成功返回0,失败返回errno的值。 |
通用函数
| socket 函数 | 函数描述 |
|---|---|
| recv(bufsize[,flag]) | 接受TCP套接字的数据。数据以 byte 式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。 |
| send |

本文介绍了使用Python构建TCP通信的基础知识,包括TCP/IP协议、Python的socket模块、socket类型和函数,以及如何进行TCP服务器和客户端编程。通过示例代码展示了如何创建服务端和客户端的socket,进行数据收发,并提供了运行结果。

635

被折叠的 条评论
为什么被折叠?



