- 论坛徽章:
- 0
|
本人使用该程序与一台本地通信设备建立数据通信.发送正常的帧(MsgList)时,recv方法能够接收到数据。但如果发送非正常的帧(即通信设备不会应答该帧),则程序就一直阻塞在recv方法那里,无法抛出异常。请教各位,怎么使得程序可以检查出对方无数据从socket发送过来,从而让recv抛出异常。使用select来检查吗?
(附:本人使用while的原因是由于应答帧可能是由远程通信设备产生,经过本地设备中转而来,这中间需要消耗一定的时间,当发生超时时就不处理)
import socket
import struct
import time
MsgStruct = ""
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
mysock.connect(('192.192.4.2',3000))
except socket.error:
sys.exit("Connect failed")
MsgList =[150, 3, 192, 192, 4, 2, 192, 192, 4, 230, 0, 0, 0, 0, 0, 1, 0, 2, 17, 0, 0, 0, 4, 158]
for num in MsgList:
MsgStruct = MsgStruct + struct.pack('@B',num)
try:
mysock.send(MsgStruct)
except error:
mysock.close()
timeout = 5000
tStart = time.time( )
while( 1 ):
tFinish = time.time( )
WaitTime = int( (tFinish - tStart)*1000 )
if WaitTime > timeout:
break
try:
Msg = mysock.recv( 4096 )
if Msg == ' ':
raise error
except:
continue
mysock.close() |
|