我在 Python3.5 中socket
遇到了一个角落。当运行下面的代码时出现错误并抛出错误。
import socket
print(socket.create_connection(('www.baidu.com', 80), source_address=('127.0.0.1', 8998)))
错误:
Traceback (most recent call last):
File "demo.py", line 4, in <module>
print(socket.create_connection(('www.baidu.com', 80), source_address=('127.0.0.1', 8998)))
File "/usr/local/lib/python3.5/socket.py", line 707, in create_connection
raise err
File "/usr/local/lib/python3.5/socket.py", line 698, in create_connection
sock.connect(sa)
OSError: [Errno 22] Invalid argument
答案 0 :(得分:1)
简短回答不!
你不能使用低级Python套接字,不知道BSD TCP堆栈是如何工作的,以及如何使用BSD套接字。
source_address
是 - 因为它清楚地说明 - 您连接的源地址和端口。您不能从环回接口地址连接到外部世界中的地址。
因此,invalid argument
错误是正确的。
你真的需要设置source_address
吗?为什么不让它进入操作系统?
答案 1 :(得分:1)
您无法使用源地址127.0.0.1
。服务器无法通过此地址与您联系,它只是在您的计算机上本地。这是您的本地环回地址。您必须使用您的公共IP地址。
最好让系统设置源地址,就像其他答案所说的那样。
socket.create_connection(('www.baidu.com', 80))