在Python中,socket
模块是网络编程的核心,它提供了创建套接字、绑定地址和端口、监听连接、发送和接收数据等功能。下面将介绍如何导入socket
模块,并展示其使用基础。
一、导入socket模块
在Python中,使用import
语句来导入socket
模块。导入后,就可以使用该模块提供的类和函数来编写网络程序。
import socket
二、创建套接字
创建套接字是网络编程的第一步。在Python中,使用socket.socket()
函数来创建套接字。该函数接受两个可选参数:地址族和套接字类型。
- 地址族(Address Family):用于指定IP地址的版本,常用的有
socket.AF_INET
(IPv4)和socket.AF_INET6
(IPv6)。 - 套接字类型(Socket Type):用于指定套接字的通信类型,常用的有
socket.SOCK_STREAM
(TCP)和socket.SOCK_DGRAM
(UDP)。
例如,创建一个IPv4的TCP套接字:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
三、绑定地址和端口
创建套接字后,需要将其绑定到一个特定的地址和端口上,以便其他计算机或程序能够通过该地址和端口访问它。使用bind()
方法来完成绑定操作。
server_address = ('localhost', 12345) # 地址和端口
sock.bind(server_address)
在上面的代码中,server_address
是一个包含地址和端口的元组。localhost
表示本机地址,12345
是端口号。你可以根据实际情况选择其他有效的地址和端口。
四、监听连接
如果创建的是TCP套接字,并且打算作为服务器使用,那么需要使用listen()
方法来监听连接请求。该方法接受一个参数,指定最大连接数。
sock.listen(1) # 监听连接,最大连接数为1
五、接受连接和发送/接收数据
对于服务器端的TCP套接字,使用accept()
方法来接受客户端的连接请求。该方法会阻塞程序执行,直到有客户端连接为止。它返回一个包含新套接字和客户端地址的元组。
对于客户端的TCP套接字或UDP套接字,使用send()
方法来发送数据,使用recv()
方法来接收数据。对于UDP套接字,还可以使用sendto()
和recvfrom()
方法来发送和接收数据,并获取发送方或接收方的地址。
以下是一个简单的TCP服务器和客户端的示例:
TCP服务器示例:
import socket
# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_address = ('localhost', 12345)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
print('等待连接...')
# 接受连接
client_socket, client_address = server_socket.accept()
print(f'连接来自 {client_address}')
# 接收数据
data = client_socket.recv(1024)
print(f'收到数据: {data.decode()}')
# 发送响应
client_socket.send(b'Hello, client!')
# 关闭连接
client_socket.close()
server_socket.close()
TCP客户端示例:
import socket
# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
server_address = ('localhost', 12345)
client_socket.connect(server_address)
# 发送数据
client_socket.send(b'Hello, server!')
# 接收响应
data = client_socket.recv(1024)
print(f'收到响应: {data.decode()}')
# 关闭连接
client_socket.close()
在上面的示例中,服务器等待客户端的连接,接收客户端发送的数据,并发送响应。客户端连接到服务器,发送数据,并接收服务器的响应。这只是一个简单的示例,实际的网络程序可能涉及更复杂的逻辑和错误处理。