首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接中止后通过套接字发布数据

连接中止后通过套接字发布数据
EN

Stack Overflow用户
提问于 2018-02-01 11:39:57
回答 2查看 441关注 0票数 0

我有一个Python (2.7)脚本,它从文件中读取实时数据并(通过网络)发布到另一台计算机上的服务器上。特别是这台服务器是Carbon服务器的石墨的一部分。

守则的有关部分如下:

代码语言:javascript
复制
import socket

CARBON_HOST = 'COMPUTER-NAME'
CARBON-PORT = 2003
CARBON_PATH = 'folder.name.meaurement'

s = socket.socket()
s.connect((CARBON_HOST, CARBON_PORT))

while True:
 if s:
  s.send('%s %s %s\n'%(CARBON_PATH, str(data), int(time.time())))
    time.sleep(WAIT)

其中data是从我的文件中导入的最新条目,而time是通常的。

当我关闭COMPUTER-NAME服务器所在的计算机Carbon时,会出现以下错误:

s.send('%s %s‘n’%(CARBON_PATH,str(data),int(time.time() socket.error: Errno 10053已建立的连接被主机中的软件中止

当我重新启动主机(COMPUTER-NAME)时,我必须重新启动Python,以便再次发送数据。

有什么方法可以让socket在看到断开连接时暂停,或者继续尝试直到连接再次打开?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-01 22:57:05

不能在socket.error异常之后使用相同的套接字,连接就中断了。但是,您可以捕获异常,创建一个新连接,并使用该连接发送数据。

关于您的最后一个问题,您可以告诉您的程序继续尝试,直到数据被发送了一个while循环。一个基本的例子

代码语言:javascript
复制
import socket
import time

CARBON_HOST = 'COMPUTER-NAME'
CARBON_PORT = 2003
CARBON_PATH = 'folder.name.meaurement'
WAIT = 10

s = socket.socket()
s.connect((CARBON_HOST, CARBON_PORT))
data = 'my data'

while True:
    packet = '%s %s %s'%(CARBON_PATH, str(data), int(time.time()))
    while True:
        try:
            s.send(packet)
            break
        except socket.error as e:
            print(e)
            s.close()
            s = socket.socket()
            s.connect_ex((CARBON_HOST, CARBON_PORT))
    time.sleep(WAIT)

s.close()
票数 1
EN

Stack Overflow用户

发布于 2018-02-01 12:10:48

我建议阅读socket.timeout(“秒到睡眠”),这将给您使用它的想法。在您的示例中,在进行套接字连接之前使用socket.settimeout(),在socket.connection()之后使用socket.settimeout(None)。这样,您就可以延迟建立连接。但是,如果超时值超出了系统/服务器的停机时间,那么脚本最终会出现相同的超时错误。

代码语言:javascript
复制
connect_timeout = 100 #in seconds
socket.settimeout(connect_timeout)
socket.connect()
socket.settimeout(None)

检查一下是否有效?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48561871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档