主要步骤
- 创建套接字:使用
socket.socket
创建一个基于IPv6的套接字对象,指定 socket.AF_INET6
地址族和 socket.SOCK_STREAM
(TCP)或 socket.SOCK_DGRAM
(UDP)类型。
- 设置套接字选项:可根据需求设置一些套接字选项,如
SO_REUSEADDR
允许重用本地地址。
- 绑定地址:使用
bind
方法将套接字绑定到指定的IPv6地址和端口。
- 监听连接(仅适用于TCP):如果是TCP套接字,调用
listen
方法开始监听传入的连接。
Python示例代码(TCP)
import socket
# 创建IPv6 TCP套接字
server_socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
# 设置套接字选项,允许重用地址
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定到指定的IPv6地址和端口
server_address = ('::1', 8888, 0, 0) # '::1' 是IPv6环回地址,8888为端口号
server_socket.bind(server_address)
# 开始监听
server_socket.listen(5) # 最大连接数为5
print('Server is listening on IPv6 address...')
while True:
client_socket, client_address = server_socket.accept()
print(f'Connected by {client_address}')
client_socket.close()
Python示例代码(UDP)
import socket
# 创建IPv6 UDP套接字
server_socket = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
# 设置套接字选项,允许重用地址
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定到指定的IPv6地址和端口
server_address = ('::1', 8888, 0, 0) # '::1' 是IPv6环回地址,8888为端口号
server_socket.bind(server_address)
print('Server is listening on IPv6 address for UDP...')
while True:
data, client_address = server_socket.recvfrom(1024)
print(f'Received from {client_address}: {data.decode()}')