使用source_address的正确方法是什么

时间:2015-11-26 09:34:25

标签: python sockets

我在 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

2 个答案:

答案 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))