网络编程是指编写程序使其能够通过网络连接与其他计算机进行通信。Python
作为一种强大的脚本语言,也提供了丰富的库来支持网络编程,如 socket、asyncio、http.client
等。在这篇教程中,我们将介绍如何使用 socket
库实现简单的网络编程。
1.Socket 编程
Socket 是一种可用于不同平台之间的进程通信机制。它可以用于创建网络套接字和进行网络通信。在 Python
中,socket
库提供了对 BSD socket API
的访问,它包含了一些常见的网络编程工具,例如 TCP
和 UDP
协议等。
2.创建 Socket
要创建一个 socket
,我们需要导入 socket
库并调用 socket()
函数。这个函数有两个参数,第一个参数是地址族(Address Family),第二个参数是套接字类型(Socket Type):
import socket
#创建一个 TCP/IP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
其中,AF_INET
表示 Internet
地址族,SOCK_STREAM
表示使用 TCP
协议。如果使用 UDP
协议,则需要使用 SOCK_DGRAM
。
3.连接 Socket
连接到另一个计算机上的 socket
需要先获取该计算机的 IP
地址和端口号。连接后,我们就可以通过 socket
对象进行数据的发送和接收了。
import socket
# 创建一个 TCP/IP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到远程计算机
server_address = ('localhost', 10000)
sock.connect(server_address)
# 发送数据
message = 'Hello, world!'
sock.sendall(message.encode('utf-8'))
# 接收数据并打印
data = sock.recv(1024)
print(f'Received: {data.decode("utf-8")}')
在上面的代码中,我们创建了一个 socket 对象,并通过 connect()
方法连接到本地地址为 ‘localhost’、端口号为 10000 的计算机。然后我们发送了一条消息,并从服务器接收到了返回值。最后,我们将返回值解码为字符串并打印出来。
4.监听 Socket
要监听来自其他计算机的连接请求,我们需要使用 bind()
方法将 socket
绑定到本地 IP
地址和端口号上。然后,我们可以调用 listen()
方法开始监听连接。
import socket
# 创建一个 TCP/IP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定到本地地址和端口
server_address = ('localhost', 10000)
sock.bind(server_address)
# 开始监听连接
sock.listen(1)
while True:
# 等待连接
print('Waiting for a connection...')
connection, client_address = sock.accept()
try:
print(f'Connection from {client_address}')
# 接收数据
data = connection.recv(1024)
print(f'Received: {data.decode("utf-8")}')
# 发送数据
message = 'Hello, client!'
connection.sendall(message.encode('utf-8'))
finally:
# 关闭连接
connection.close()
在上面的代码中,我们创建了一个 socket
对象,并通过 bind()
方法将其绑定到本地地址为 ‘localhost’、端口号为 10000
的计算机。随后,我们调用 listen()
方法开始监听连接。通过 send()
方法可以发送数据到服务器。通过recv()
方法可以从服务器接收数据。这些操作是阻塞的,也就是说,在数据发送或接收完成之前,程序会一直等待。
while
循环中,我们使用 accept()
方法等待客户端连接。当一个新客户端连入时,我们会得到一个新的 socket
连接和客户端地址(IP 地址和端口号)。然后,我们可以使用这个新的连接进行数据的发送和接收。最后,我们调用 close()
关闭连接并继续等待下一个客户端连接。
上一篇教程:Python面向对象编程
5.小结
本篇教程介绍了如何使用 Python 中的 socket
库实现网络编程。网络通信中还是三种模式:单工模式、半双工模式、全双工模式,有兴趣的小伙伴可以自己动手,强化python网络编程的技能。