在 Python 中,getpeername() 是 socket 对象的一个方法,用于获取与当前 socket 连接的对端(远程)地址信息,它通常用于 TCP 或 Unix 域 socket 连接,返回的是一个包含 IP 地址和端口号(对于 TCP/IP)或路径(对于 Unix 域 socket)的元组。
基本用法
import socket
# 创建一个 TCP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到远程服务器
sock.connect(('example.com', 80))
# 获取对端地址
peer_address = sock.getpeername()
print(f"对端地址: {peer_address}")
# 关闭 socket
sock.close()
输出示例
对端地址: ('93.184.216.34', 80)
注意事项
-
必须先建立连接:
getpeername()只能在 socket 已经成功建立连接后调用,socket 未连接,调用该方法会抛出OSError异常。 -
适用于已连接的 socket:该方法仅适用于已连接的 socket(如通过
connect()或accept()建立的连接),对于监听中的 socket(如通过bind()和listen()创建的 socket),应使用getsockname()获取本地地址。 -
Unix 域 socket:对于 Unix 域 socket(
AF_UNIX),getpeername()返回的是对端 socket 的路径,而不是 IP 和端口。
示例:Unix 域 socket
import socket
# 创建一个 Unix 域 socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
# 连接到 Unix 域 socket
sock.connect('/tmp/my_socket')
# 获取对端地址
peer_address = sock.getpeername()
print(f"对端地址: {peer_address}")
# 关闭 socket
sock.close()
异常处理
在实际使用中,建议对 getpeername() 进行异常处理,以应对可能的错误情况:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect(('example.com', 80))
peer_address = sock.getpeername()
print(f"对端地址: {peer_address}")
except OSError as e:
print(f"错误: {e}")
finally:
sock.close()
getpeername()用于获取已连接 socket 的对端地址。- 它返回的是一个包含 IP 地址和端口号(TCP/IP)或路径(Unix 域 socket)的元组。
- 必须在 socket 成功连接后调用,否则会导致异常。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/483514.html



