当前位置: 技术文章>> Python高级专题之-Python与网络编程:socket编程

文章标题:Python高级专题之-Python与网络编程:socket编程
  • 文章分类: 后端
  • 9079 阅读
文章标签: python python高级

Python网络编程:深入探索Socket编程

在网络编程的浩瀚宇宙中,Python凭借其简洁的语法和强大的库支持,成为了开发者们探索网络世界的首选工具。其中,Socket编程作为网络通信的基础,更是每位有志于深入网络编程领域的程序员必须掌握的技能。今天,我们就来一同揭开Socket编程的神秘面纱,通过实战案例,让你在码小课的陪伴下,轻松驾驭Python的Socket编程。

一、Socket编程基础

Socket,直译为“套接字”,是网络通信中的一个端点接口,它提供了两台计算机之间进行数据交换的通道。在Python中,socket库提供了对底层网络通信的支持,让我们能够创建TCP和UDP等协议的网络应用。

1. TCP与UDP的区别
  • TCP(传输控制协议):面向连接的协议,提供可靠的数据传输服务。在发送数据前,需要建立连接(三次握手),数据发送完毕后,需要断开连接(四次挥手)。适用于对数据可靠性要求较高的场景。
  • UDP(用户数据报协议):无连接的协议,不保证数据的可靠性、顺序或完整性。每个数据报都是一个独立的信息,发送方和接收方之间不需要建立连接。适用于对实时性要求高,但可以接受一定数据丢失的应用场景。

二、Python Socket编程实战

1. TCP服务器与客户端

服务器端代码示例

import socket

# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定地址和端口
server_socket.bind(('localhost', 12345))

# 监听连接
server_socket.listen(5)

print("服务器启动,等待连接...")

while True:
    # 接受连接
    client_socket, addr = server_socket.accept()
    print(f"连接来自: {addr}")
    
    # 接收数据
    data = client_socket.recv(1024).decode('utf-8')
    print(f"收到数据: {data}")
    
    # 发送响应
    client_socket.sendall(f"服务器收到: {data}".encode('utf-8'))
    
    # 关闭连接
    client_socket.close()

客户端代码示例

import socket

# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
client_socket.connect(('localhost', 12345))

# 发送数据
client_socket.sendall("Hello, Server!".encode('utf-8'))

# 接收响应
data = client_socket.recv(1024).decode('utf-8')
print(f"来自服务器的响应: {data}")

# 关闭连接
client_socket.close()

上述代码分别展示了如何创建一个简单的TCP服务器和客户端。服务器监听特定端口,等待客户端的连接请求,接收并响应数据。客户端则连接到服务器,发送数据并接收服务器的响应。

2. UDP通信

UDP通信相比TCP更为简单,因为它不需要建立连接。以下是UDP服务器和客户端的示例代码。

UDP服务器端

import socket

# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定地址和端口
server_socket.bind(('localhost', 12345))

print("UDP服务器启动,等待数据...")

while True:
    # 接收数据
    data, addr = server_socket.recvfrom(1024)
    print(f"收到来自{addr}的数据: {data.decode('utf-8')}")
    
    # 发送响应
    server_socket.sendto("服务器收到!".encode('utf-8'), addr)

UDP客户端

import socket

# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 发送数据
client_socket.sendto("Hello, UDP Server!".encode('utf-8'), ('localhost', 12345))

# 接收响应
data, server = client_socket.recvfrom(1024)
print(f"来自服务器的响应: {data.decode('utf-8')}")

# 关闭连接(对于UDP来说,这一步可选)
client_socket.close()

通过这两个示例,你可以看到UDP通信的简洁性

推荐文章