我的目标是使用Up的主机打开套接字。
我的初始代码只有一个主机:
!/usr/bin/python
import socket
def Socket(host, port):
# create socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((str(host), port))
except Exception as e:
print("Error Socket not open")
# Request
Request = "GET services\n"
# Send
s.sendall(Request)
s.shutdown(socket.SHUT_WR)
data = ""
while 1:
buf = s.recv(255)
if not buf:
break
data += buf
s.close()
table = [ line.split(';') for line in data.split('\n')[:-1] ]
return table;
我通过
调用此函数Socket('myhost1', 50000)
我想使用类似的东西:
Socket(['myhost1','myhost2'], 50000)
如果函数无法使用myhost打开套接字,我想使用myhost2打开套接字。
如果套接字无法使用myhost1打开,如何进行测试?
THX
答案 0 :(得分:1)
一个简单的解决方案是简单地循环主机,并使用第一个成功的连接。
def Socket(hosts, port):
# create socket
sock = connect(hosts, port)
# Send
Request = "GET services\n"
sock.sendall(Request)
sock.shutdown(socket.SHUT_WR)
data = ""
while 1:
buf = sock.recv(255)
if not buf:
break
data += buf
sock.close()
table = [line.split(';') for line in data.split('\n')[:-1]]
return table
def connect(hosts, port):
for host in hosts:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((str(host), port))
except socket.error:
# Unable to establish a connection, lets move on to the next host.
continue
return sock
raise Exception('Unable to establish connection')
在新的connect方法中,我们基本上尝试建立连接,如果失败,请尝试第二个地址。如果所有地址都失败,只需引发异常。