Python 构建TCP通讯/TCP转发

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

Python 构建TCP通讯

TCP/IP协议

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议 不仅仅 指的是TCPIP两个协议,而是指一个由FTPSMTP、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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值