【问题标题】:Django socket connection timoutDjango 套接字连接超时
【发布时间】:2020-06-02 12:57:13
【问题描述】:

我正在尝试检查某个设备 (Lauterbach PowerDebug Pro) 是否已连接到网络。我在 Django 视图中使用了以下代码。

    def checkConnection(hostname, port, timeout=5):
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.settimeout(timeout)
        message = bytes.fromhex('{1024 bytes here}')
        s.sendto(message,(hostname,port))
        try:
            if s.recv(1024):
                return True
        except ConnectionResetError:
            return False
        except socket.timeout:
            return False

如果我从 Django 视图(通过 AJAX 调用)运行此函数,它将返回 False

如果我在 Python 控制台中运行此代码,它将返回 True。如果我运行manage.py shell 并手动编写此代码,它将返回True

但是,如果我运行manage.py shell,导入并调用此函数,由于超时错误,它将返回False

怎么会?我不知道为什么它不起作用。我已经使用 Wireshark 捕获了这些消息,它们都是一样的。下面是输出。

在 Django shell 中手动编写的代码(返回 True):

没有。时间源目的地
协议长度信息 233 17.202222 10.171.90.59 10.171.94.100 UDP 1066 59221 → 60010 Len=1024

第 233 帧:1066 字节在线(8528 位),1066 字节捕获(8528 位)在接口 0 Ethernet II,Src:IntelCor_c1:d7:3e (b4:6b:fc:c1:d7:3e), Dst: All-HSRP-routers_5a (00:00:0c:07:ac:5a) Internet 协议版本 4,Src:10.171.90.59,Dst:10.171.94.100 用户数据报协议,Src 端口:59221,Dst 端口:60010 数据(1024 字节)

0000 03 01 01 00 62 ea 46 fd 54 52 41 43 45 33 32 00
....b.F.TRACE32。 0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0310 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0350 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0370 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 数据:0301010062ea46fd54524143453332000000000000000000… [长度:1024]

没有。时间源目的地
协议长度信息 234 17.220294 10.171.94.100 10.171.90.59 UDP 58 60002 → 59221 Len=16

第 234 帧:线上 58 个字节(464 位),捕获的 58 个字节(464 位) 在接口 0 以太网 II 上,Src:Cisco_74:52:0b (a4:6c:2a:74:52:0b), Dst:IntelCor_c1:d7:3e (b4:6b:fc:c1:d7:3e) Internet 协议版本 4、Src:10.171.94.100,Dst:10.171.90.59 用户数据报协议,Src 端口:60002,目标端口:59221 数据(16 字节)

0000 23 00 00 00 0a ab 5a 3b 54 52 41 43 45 33 32 00

.....Z;TRACE32.

Data: 230000000aab5a3b5452414345333200
[Length: 16]

在 Django shell 中导入并运行 checkConnection 函数(返回 True):

没有。时间源目的地
协议长度信息 437 53.946438 10.171.90.59 10.171.94.100 UDP 1066 59224 → 60010 Len=1024

第 437 帧:1066 字节在线(8528 位),1066 字节捕获(8528 位)在接口 0 Ethernet II,Src:IntelCor_c1:d7:3e (b4:6b:fc:c1:d7:3e), Dst: All-HSRP-routers_5a (00:00:0c:07:ac:5a) Internet 协议版本 4,Src:10.171.90.59,Dst:10.171.94.100 用户数据报协议,Src 端口:59224,Dst 端口:60010 数据(1024 字节)

0000 03 01 01 00 62 ea 46 fd 54 52 41 43 45 33 32 00
....b.F.TRACE32。 0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 00f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 01f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 02f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0310 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0350 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0370 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 03f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 数据:0301010062ea46fd54524143453332000000000000000000… [长度:1024]

没有。时间源目的地
协议长度信息 438 53.948831 10.171.94.100 10.171.90.59 UDP 58 60002 → 59224 Len=16

第 438 帧:线上 58 字节(464 位),捕获的 58 字节(464 位) 在接口 0 以太网 II 上,Src:Cisco_74:52:0b (a4:6c:2a:74:52:0b), Dst:IntelCor_c1:d7:3e (b4:6b:fc:c1:d7:3e) Internet 协议版本 4、Src:10.171.94.100,Dst:10.171.90.59 用户数据报协议,Src 端口:60002,目标端口:59224 数据(16 字节)

0000 23 00 00 00 0a ab 5a 3b 54 52 41 43 45 33 32 00

.....Z;TRACE32.

Data: 230000000aab5a3b5452414345333200
[Length: 16]

那是什么?

编辑:它适用于 TCP 连接(例如 checkConnection('10.11.12.13', 23) 将返回 True)。由于某种原因,只有 UDP 消息不会被接收。

在这种情况下,checkConnection 是:

    def checkConnection(hostname, port, timeout=5):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(timeout)
        try:
            s.connect((hostname, port))
            s.shutdown(socket.SHUT_WR)
            while True:
                try:
                    data = s.recv(1024)
                    if data:
                        s.close()
                        return True
        except socket.timeout:
            return False
        except TimeoutError:
            return False
        except ConnectionRefusedError:
            return False
        except ConnectionResetError:
            return False

【问题讨论】:

  • 是否应该在 sendto 之前定义消息?
  • @tomgalpin 是的,我在粘贴代码时犯了一个错误。我已经更正了。

标签: python django sockets udp lauterbach


【解决方案1】:

看来诀窍是将recvfrom() 用于UDP。

        try:
            data, address = s.recvfrom(1024)
            if data:
                return True

recv()
recv() 调用通常仅在连接的套接字上使用(请参阅connect(2))。
相当于调用:

recvfrom(fd, buf, len, flags, NULL, 0);

我仍然不明白为什么recv() 在所有情况下都有效,除了从 Django 视图运行。

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 1970-01-01
    • 2012-11-17
    • 2011-02-05
    • 2018-11-26
    • 2016-10-02
    • 2016-02-14
    相关资源
    最近更新 更多