【python基础】6.网络编程和通信

发布时间 2024-01-04 11:19:48作者: asdio

网络编程和通信

基于Socket的网络编程

Socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket后面,对用户来说只需要调用Socket规定的相关接口,让Socket去组织符合指定的协议数据然后进行通信。

TCP Socket

  • servet
    1. 创建socket对象
    2. 绑定IP地址和端口号
    3. 监听连接
    4. 等待客户端连接
    5. 接收客户端数据
    6. 发送数据到客户端
    7. 关闭连接
# server.py
import socket

# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '127.0.0.1'
port = 8080

# 绑定IP地址和端口号
s.bind((ip, port))

# 监听连接
s.listen(5)

# 等待客户端连接
while True:
    c, addr = s.accept()
    print('连接地址:', addr)
    # 接收客户端数据
    print(c.recv(1024).decode('utf-8'))
    # 发送数据到客户端
    c.send('hello'.encode('utf-8'))
    # 关闭连接
    c.close()
  • client
    1. 创建socket对象
    2. 连接服务器
    3. 发送数据到服务器
    4. 接收服务器数据
    5. 关闭连接
# client.py
import socket

# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '127.0.0.1'
port = 8080

# 连接服务器
s.connect((ip, port))

# 发送数据到服务器
s.send('hello'.encode('utf-8'))

# 接收服务器数据
print(s.recv(1024).decode('utf-8'))

# 关闭连接
s.close()

UDP Socket

  • server
    1. 创建socket对象
    2. 绑定IP地址和端口号
    3. 接收数据
    4. 发送数据
    5. 关闭连接
# server.py
import socket

# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip = '127.0.0.1'
port = 8080

# 绑定IP地址和端口号
s.bind((ip, port))

while True:
# 接收数据
    data, addr = s.recvfrom(1024)
    if not data:
        break
    print('接收到数据:', data.decode('utf-8'))
    # 发送数据
    s.sendto('hello'.encode('utf-8'), addr)        

# 关闭连接
s.close()
  • client
    1. 创建socket对象
    2. 发送数据
    3. 接收数据
    4. 关闭连接
# client.py
import socket

# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip = '127.0.0.1'
port = 8080


# 发送数据
s.sendto('hello'.encode('utf-8'), (ip, port))

# 接收数据
new_data, addr = s.recvfrom(1024)
print(new_data.decode('utf-8'))

# 关闭连接
s.close()

基于urllib的网络编程

urllib

urllib提供了一系列用于操作URL的功能。

  • urllib.request:打开和读取URLs
  • urllib.error:包含urllib.request抛出的异常
  • urllib.parse:解析URLs
  • urllib.robotparser:解析robots.txt文件
  • urllib.response:包含urllib.request返回的对象

urllib.request

  • urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None):打开URLs
    • url:URL
    • data:发送到服务器的数据
    • timeout:设置超时时间
    • cafile:CA证书文件
    • capath:CA证书路径
    • cadefault:是否使用默认的CA证书
    • context:SSL设置
import urllib.request

# 打开URL
response = urllib.request.urlopen('http://www.baidu.com')
# 读取URL
print(response.read().decode('utf-8'))

基于http的网络编程

http

  • http.client:HTTP协议客户端
  • http.server:HTTP协议服务器端
  • http.cookies:HTTP协议Cookies
  • http.cookiejar:HTTP协议CookieJar

http.client

  • http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None, blocksize=8192):创建HTTP连接
    • host:主机名
    • port:端口号
    • timeout:超时时间
    • source_address:源地址
    • blocksize:块大小
import http.client

# 创建HTTP连接
conn = http.client.HTTPConnection('www.baidu.com')
# 发送请求
conn.request('GET', '/')
# 获取响应
response = conn.getresponse()
# 读取响应
print(response.read().decode('utf-8'))
# 关闭连接
conn.close()