Python基础教程:Socket网络编程

网络编程是指编写程序使其能够通过网络连接与其他计算机进行通信。Python 作为一种强大的脚本语言,也提供了丰富的库来支持网络编程,如 socket、asyncio、http.client 等。在这篇教程中,我们将介绍如何使用 socket 库实现简单的网络编程。

1.Socket 编程

Socket 是一种可用于不同平台之间的进程通信机制。它可以用于创建网络套接字和进行网络通信。在 Python 中,socket 库提供了对 BSD socket API 的访问,它包含了一些常见的网络编程工具,例如 TCPUDP 协议等。

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 的计算机。然后我们发送了一条消息,并从服务器接收到了返回值。最后,我们将返回值解码为字符串并打印出来。
Python基础教程:Socket网络编程_第1张图片

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网络编程的技能。

你可能感兴趣的:(Python教程,python,网络)