pyhton网络编程

一、IP/TCP

IP:

对应的是计算机的网络接口

IP协议:

负责把数据从一台计算机通过网络发送到另一台计算机,IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达

IP地址实际上是一个32位整数(称为IPv4),以字符串表示的IP地址,如192.168.0.1,实际上是把32位整数按8位分组后的数字表示,目的是便于阅读。

IPv6地址实际上是一个128位整数,它是目前使用的IPv4的升级版,以字符串表示类似于2001:0db8:85a3:0042:1000:8a2e:0370:7334。

TCP协议:

TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。

许多常用的更高级的协议都是建立在TCP协议基础上的,比如用于浏览器的HTTP协议、发送邮件的SMTP协议等。

一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口。

二、端口

端口对应的是进程,用于计算机进行通信时区分具体要进行通信的进程,比如通过TCP发送文件,通过端口找到目标IP的对应进程,一个进程可能与多方通信,所以一个进程可能会占用多个接口

三、UDP协议(用户数据报协议)

UDP 发送数据之前不需要建立连接,是一种无连接的、不可靠的网络传输协议,只管发不管收

特点:

  • 无连接
  • 资源开销小
  • 传输速度快
  • udp每个数据包最大64K

优点:

  • 传输速度快
  • 不需要连接,资源开销小

缺点:

  • 传输数据不可靠,容易丢失数据包
  • 没有流量控制,当对方没有及时接收数据,发送方一直发送数据会导致缓冲区数据满了,电脑出现卡死情况,所以接收方需要及时接收数据。

QQ微信的传输就是UDP

四、Socket套接字

socket是介于应用层和TCP、UDP/IP协议中间的一个抽象层

解释:假设一个用户X,本身包含IP和端口,他把IP和端口给套接字A,套接字拿到信息再去跟别的计算机通过TCP/UDP等协议通信,接收的用户Y的套接字B负责接收,套接字B再把消息根据IP和端口给用户Y(“用户”通常是各自计算机的应用程序)

套接字的作用:提供了一个接口,它与IP、端口、协议关联,并支持错误处理、数据流控制和连接管理等功能,以实现高效的网络通信。

Python中的Socket模块

Python提供了socket库,我们用 socket() 函数来创建套接字,语法如下:

socket.socket([family[, type[, proto]]]) 
scoket.socket(AF_INET, SOCK_STREAM)
scoket.socket(AF_INET, SOCK_DGRAM)

参数:

  • family:套接字家族可以是 AF_UNIX 或者 AF_INET。
  • type:套接字类型分为:面向连接的(TCP)使用SOCK_STREAM或面向非连接的(UDP)使用SOCK_DGRAM。
  • proto:是指定套接字使用的底层协议的参数。一般不填,使用默认即可。

注意: 套接字家族family分为两类:

1、套接字家族名字:AF_UNIX,指的是基于

文件类型的套接字,调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信(只能用于同一计算机中的进程间通讯即本地跨进程通讯)。

2、套接字家族名字:AF_INET,指的是基于

IPv4网络协议的套接字,适用于跨机器间的通讯即不同主机间通讯,如果要用更先进的IPv6,就指定为AF_INET6,还有一些其他的地址家族,不过所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是网络编程大部分时候只使用AF_INET。

 Python中Scoket对象的内置方法

1、服务器端套接字函数

函数

描述

s.bind()

绑定地址(host,port)到套接字,在AF_INET下,以元组(host,port)的形式表示地址。

s.listen()

开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。

s.accept()

被动接受TCP客户端连接,(阻塞式)等待连接的到来。

2、客户端套接字函数

函数

描述

s.connect()

主动初始化TCP服务器连接,一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

s.connect_ex()

connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

3、公共用途的套接字函数

函数

描述

s.recv()

接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。

s.send()

发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。

s.sendall()

完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。

s.recvfrom()

接收UDP数据,与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。

s.sendto()

发送UDP数据,将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。

s.close()

关闭套接字

s.getpeername()

返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。

s.getsockname()

返回套接字自己的地址。通常是一个元组(ipaddr,port)

s.setsockopt(level,optname,value)

设置给定套接字选项的值。

s.getsockopt(level,optname[.buflen])

返回套接字选项的值。

s.settimeout(timeout)

设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如connect())

s.gettimeout()

返回当前超时期的值,单位是秒,如果没有设置超时期,则返回None。

s.fileno()

返回套接字的文件描述符。

s.setblocking(flag)

如果 flag 为 False,则将套接字设为非阻塞模式,否则将套接字设为阻塞模式(默认值)。非阻塞模式下,如果调用 recv() 没有发现任何数据,或 send() 调用无法立即发送数据,那么将引起 socket.error 异常。

s.makefile()

创建一个与该套接字相关连的文件

Python网络编程常见模块

Python模块

功能

协议

端口号

httplib,urllib,xmlrpclib

网页访问

HTTP

80

nntplib

阅读和张贴新闻文章,俗称为“帖子”

NNTP

119

ftplib, urllib

文件传输

FTP

20

smtplib

发送邮件

SMTP

25

poplib

接收邮件

POP3

110

imaplib

获取邮件

IMAP4

143

telnetlib

命令行

Telnet

23

gopherlib, urllib

信息查找

Gopher

70

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值