Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2.7套接字错误37“;“已在运行中”;_Python_Python 2.7_Sockets - Fatal编程技术网

Python2.7套接字错误37“;“已在运行中”;

Python2.7套接字错误37“;“已在运行中”;,python,python-2.7,sockets,Python,Python 2.7,Sockets,我正在制作一个脚本,读取一个充满代理服务器的文件,并检查它们是否正常工作 import socket proxyFile = open("proxies.txt","r"); lines = proxyFile.readlines(); class Colors: none = "\033[0m"; red = "\033[31m"; green = "\033[32m"; yellow = "\033[33m"; blue = "\033[34m";

我正在制作一个脚本,读取一个充满代理服务器的文件,并检查它们是否正常工作

import socket

proxyFile = open("proxies.txt","r");
lines = proxyFile.readlines();

class Colors:
    none = "\033[0m";
    red = "\033[31m";
    green = "\033[32m";
    yellow = "\033[33m";
    blue = "\033[34m";
    purple = "\033[35m";
    cyan = "\033[36m";

sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM);
sock.settimeout(3);

for line in lines:
    line = line.replace(":"," : ");
    reader = line.split();
    ip = reader[reader.index(":") - 1];
    port = int(reader[reader.index(":") + 1]);
    try:
        sock.connect((ip,port));
        print Colors.cyan + ip + ":" + str(port) + Colors.none + " is " + Colors.green + "UP";
        sock.close();
    except socket.timeout:
        print Colors.cyan + ip + Colors.yellow + ":" + Colors.cyan + str(port) + Colors.none + " is " + Colors.red + "DOWN";
看起来文件读取良好,套接字创建,但它只连接到一台服务器,然后给出错误

代理文件:

1.0.134.56:8080
1.165.192.248:3128
1.172.185.143:53281
1.179.156.233:8080
1.179.164.213:8080
1.179.185.253:8080
1.192.242.191:3128
1.20.169.166:8080
1.20.179.68:8080
1.20.99.163:8080
你不能是一个插座。一旦连接,它就连接了。即使你打电话:

将来对套接字对象的所有操作都将失败

正确的答案是每次通过循环创建一个新的套接字,无论是使用还是使用and
connect
。例如,将
try
块更改为:

try:
    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM);
    sock.settimeout(3);
    sock.connect((ip,port));
    print Colors.cyan + ip + ":" + str(port) + Colors.none + " is " + Colors.green + "UP";
    sock.close();
except socket.timeout:
    print Colors.cyan + ip + Colors.yellow + ":" + Colors.cyan + str(port) + Colors.none + " is " + Colors.red + "DOWN";

关闭套接字后,无法重新连接它。每次通过循环创建一个新的套接字。@abarnert啊,我不知道,谢谢!作为旁注:分号在Python中不像在C中那样是语句终止符;它们只用于在同一行上分隔多个简单语句(这是一件非常罕见的事情)。您不应该在每行末尾都有一个。此外,只要可能,您应该使用
with
语句,而不是显式的
close
调用(或者根本不关闭文件)。在Python 3.2+中,这适用于套接字和文件。另外,如果只想迭代行,则不需要对文件调用
readlines
;只需迭代文件中的
行:
@abarnert感谢您提供的提示和信息!此外,我使用分号作为强迫症的标记。