测试代码:
import usocket, osTimer, log, utime
log.basicConfig(level=log.INFO)
socket_log = log.getLogger("SOCKET")
sock = None
def send_loop(arg):
if sock == None:
return
try:
ret = sock.send(
"1234567890123456789012345678901234567890123456789012345678901234567890123456789013245678901324567890013245678901324567890"
)
socket_log.info("send %d bytes" % ret)
except Exception as e:
socket_log.error("send error: %s" % str(e))
if __name__ == "__main__":
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
sock.connect(("115.120.239.161", 24100))
timer = osTimer()
timer.start(1000, 1, send_loop)
status = 0
while True:
status = sock.getsocketsta()
print(status)
if status == -1:
print("reconnect")
try:
sock = None
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
sock.connect(("115.120.239.161", 24100))
except Exception as e:
socket_log.error("error: %s" % str(e))
try:
data = sock.recv(256)
if data:
socket_log.info("recv %s bytes: %s" % (len(data), data.decode()))
except Exception as e:
socket_log.error("recv error: %s" % str(e))
utime.sleep_ms(100)
用的是合宙的测试服务器,上面测试代码出现[Errno 103] ECONNABORTED的几率比较低,可能一两个小时也不会出现,也可能很快,几十分钟就会出现
日志结果如下:
另外我使用我的程序时,出现的几率比较高,报错如下所示,出现ECONNABORTED时进行重连,但是重连会提示EHOSTUNREACH,最后设备会重启,但这个重启不是我调用的;并且数据上报频率低时,出现的几率会降低。

