gpt4 book ai didi

python - 如何使用主动/被动主机在Python中打开套接字?

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:26 25 4
gpt4 key购买 nike

我的目标是打开与已启动主机的套接字。

我使用单个主机的初始代码:

!/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 打开,如何进行测试?

谢谢

最佳答案

一个简单的解决方案是简单地循环主机,并使用第一个成功的连接。

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')

在新的连接方法中,我们基本上尝试建立连接,如果失败,则尝试第二个地址。如果所有地址都失败,只需引发异常即可。

关于python - 如何使用主动/被动主机在Python中打开套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37731068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com