美文网首页
python之网络编程

python之网络编程

作者: 秣禾 | 来源:发表于2022-05-10 21:58 被阅读0次

1. 简介

网络编程主要的工作就是在发送端将信息通过指定的协议进行组装包,在接收端按照规定好的协议对包进行解析并提取出对应的信息,最终达到通信的目的。

传输协议主要有 TCP 和 UDP:
TCP 需要建立连接,是可靠的、基于字节流的协议,通常与 IP 协议共同使用;
UDP 不需要建立连接,可靠性差,但速度更快。

网络编程有一个重要的概念 socket(套接字),应用程序可以通过它发送或接收数据,套接字允许应用程序将 I/O 插入到网络中,并与网络中的其他应用程序进行通信。

Python 提供了如下两个 socket 模块:

(1)Socket
提供了标准的 BSD Sockets API,可以访问底层操作系统 Socket 接口的全部方法。
(2)SocketServer
提供了服务器中心类,可以简化网络服务器的开发。

2. 使用

2.1 API 介绍

Python 中通过 socket() 函数来创建套接字对象,具体格式如下:

socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

family:套接字协议族,可以使用 AF_UNIX(只能用于单一的 Unix 系统进程间通信)、AF_INET(服务器之间网络通信)
type:套接字类型,可以使用 SOCK_STREAM(面向连接的)、SOCK_DGRAM(非连接的)

套接字对象服务端方法:

(1)bind(address): 将套接字绑定到地址,在 AF_INET 下以元组 (host,port) 的形式表示地址
(2)listen([backlog]): 开始监听 TCP 传入连接,backlog 指定在拒绝连接之前,操作系统可以挂起的最大连接数量,至少为1,大部分应用程序设为 5 就可以了
(3)accept(): 接受 TCP 连接并返回 (conn,address),conn 是新的套接字对象,可以用来接收、发送数据,address 是连接客户端的地址

套接字对象客户端方法:

(1)connect(address): 连接到 address 处的套接字,格式一般为元组 (hostname,port),如果连接出错,返回 socket.error 错误
(2)connect_ex(address): 功能与 connect(address) 相同,但是成功返回 0,失败返回 errno 的值

套接字对象公用方法:
image.png
image.png

2.2 TCP 方式

我们来看一下如何通过 socket 以 TCP 方式进行通信。

服务端基本思路:

创建套接字,绑定套接字到 IP 与端口
监听连接
不断接受客户端的连接请求
接收请求的数据,并向对方发送响应数据
传输完毕后,关闭套接字

具体代码实现如下:

import socket

# 创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址
s.bind(('127.0.0.1', 6666))
# 监听连接
s.listen(5)
while True:
    print('等待客户端发送信息...')
    # 接收连接
    sock, addr = s.accept()
    # 接收请求数据
    data = sock.recv(1024).decode('utf-8')
    print('服务端接收请求数据:' + data)
    # 发送响应数据
    sock.sendall(data.upper().encode('utf-8'))
    # 关闭
    sock.close()
客户端基本思路:

创建套接字,连接服务端
连接后发送、接收数据
传输完毕后,关闭套接字

具体代码实现如下:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务端
s.connect(('127.0.0.1', 6666))
# 向服务端发送数据
s.sendall(b'hello')
# 接受服务端响应数据
data = s.recv(1024)
print('客户端接收响应数据:' + data.decode('utf-8'))
# 关闭
s.close()

我们只需先运行服务端代码,再运行客户端代码即可。

2.3 UDP 方式

我们再来看一下如何通过 socket 以 UDP 方式进行通信。

服务端基本思路:

创建套接字,绑定套接字到 IP 与端口
接收客户端请求的数据
向客户端发送响应数据

具体代码实现如下:

import socket

# 创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定地址
s.bind(('127.0.0.1', 6666))
while True:
    # 接收数据
    data, addr = s.recvfrom(1024)
    print('服务端接收请求数据:' + data.decode('utf-8'))
    # 响应数据
    s.sendto(data.decode('utf-8').upper().encode('utf-8'), addr)
客户端基本思路:

创建套接字
向服务端发送数据
接受服务端响应数据

具体代码实现如下:

import socket

# 创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 向服务端发送数据
s.sendto(b'hello', ('127.0.0.1', 6666))
# 接受服务端响应数据
data = s.recv(1024).decode('utf-8')
print('客户端接收响应数据:' + data)
# 关闭
s.close()

同样的,我们还是先运行服务端代码,再运行客户端代码即可。

相关文章

  • Python之网络编程

    一、TCP编程 socket用于打开网络连接,打开一个socket需要知道目标计算机的ip地址和端口号,还有协议类...

  • python之网络编程

    网络编程基础知识 客户端/服务器架构 硬件服务器  1、文件服务器:拥有庞大通用存储容量的计算机,可以被客户端远程...

  • python之网络编程

    1. 简介 网络编程主要的工作就是在发送端将信息通过指定的协议进行组装包,在接收端按照规定好的协议对包进行解析并提...

  • 《python核心编程》之“网络编程”

    本文主要是使用socket模块。 模块函数socket() 要创建套接字,必须使用 socket.socket()...

  • tcp和udp

    【Python网络编程】利用Python进行TCP、UDP套接字编程 http://www.cnblogs.com...

  • Linux网络编程篇之ICMP协议分析及ping程序实现

    Linux网络编程系列: Linux网络编程篇之Socket编程预备知识 Linux网络编程篇之TCP协议分析及聊...

  • Python之——网络编程笔记

    1. 套接字 套接字是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。在任何类型的通信开始之前,网络...

  • Python学习之网络编程

    互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。如何分层有不同的模型,有的模...

  • 31.Python之网络编程(socket模块)

    Python之网络编程(socket模块) 什么是socket?Socket是应用层与TCP / IP协议族通信的...

  • 从Web解析到网络空间

    -Python库之网络爬虫-Python库之Web信息提取-Python库之Web网站开发-Python库之网络应...

网友评论

      本文标题:python之网络编程

      本文链接:https://www.haomeiwen.com/subject/ycovyrtx.html