gpt4 book ai didi

Python套接字连接异常

转载 作者:太空狗 更新时间:2023-10-29 17:57:19 25 4
gpt4 key购买 nike

我有一个正在进行的套接字连接,我想改进异常处理,但我被卡住了。每当我使用无效参数调用 socket.connect(server_address) 时,程序就会停止,但似乎不会引发异常。这是我的代码:

import socket
import sys
import struct
class ARToolkit():

def __init__(self):
self.x = 0
self.y = 0
self.z = 0
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.logging = False

def connect(self,server_address):
try:
self.sock.connect(server_address)
except socket.error, msg:
print "Couldnt connect with the socket-server: %s\n terminating program" % msg
sys.exit(1)

def initiate(self):
self.sock.send("start_logging")

def log(self):
self.logging = True
buf = self.sock.recv(6000)
if len(buf)>0:
nbuf = buf[len(buf)-12:len(buf)]
self.x, self.y, self.z = struct.unpack("<iii", nbuf)

def stop_logging(self):
print "Stopping logging"
self.logging = False
self.sock.close()

该类可能看起来有点奇怪,但它用于从另一台运行 ARToolKit 的计算机接收坐标。不管怎样,问题出在 connect() 函数上:

def connect(self,server_address):
try:
self.sock.connect(server_address)
except socket.error, msg:
print "Couldnt connect with the socket-server: %s\n terminating program" % msg
sys.exit(1)

如果我用一个随机的 IP 地址和端口号调用该函数,整个程序就会停止在该行:

self.sock.connect(server_address)

我读过的文档指出,如果出现错误,它将抛出 socket.error-exception。我也尝试过:

except Exception, msg:

如果我没记错的话,这会捕获任何异常,但仍然不会产生任何结果。我将非常感谢您的帮助。另外,当发生不需要的异常时,可以使用 sys.exit 退出程序吗?

谢谢

最佳答案

如果您选择了随机但有效的 IP 地址和端口,socket.connect() 将尝试与该端点建立连接。默认情况下,如果没有为套接字设置显式超时,它将在这样做时阻塞并最终超时,引发异常 socket.error: [Errno 110] Connection timed out

我机器上的默认超时是 120 秒。也许您等待 socket.connect() 返回(或超时)的时间不够长?

您可以尝试像这样减少超时:

import socket

s = socket.socket()
s.settimeout(5) # 5 seconds
try:
s.connect(('123.123.123.123', 12345)) # "random" IP address and port
except socket.error, exc:
print "Caught exception socket.error : %s" % exc

请注意,如果为套接字明确设置了超时,则异常将是 socket.timeout,它派生自 socket.error,因此会被以上 except 条款。

关于Python套接字连接异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25447803/

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