io_helpers.py 文件源码

python
阅读 31 收藏 0 点赞 0 评论 0

项目:core-framework 作者: RedhawkSDR 项目源码 文件源码
def getData( self, mgroup, hostip, port=29495, pkts=1000, pktlen=1080, block=True, returnSddsAnalyzer=True):
        totalRead=0.0
        startTime = _time.time()        
        sock = None
        ismulticast=False
        blen=10240
        bytesRead=0
        requestedBytes=pkts*pktlen
        data=[]
        rawdata=''
        try:
            try:
                ip_class=int(mgroup.split('.')[0])
                if ip_class == '224' or ip_class == '239':
                    ismulticast=True
            except:
                pass

            #print " Capturing ", mgroup, " host ", hostip, " port ", port
            sock = _socket.socket(_socket.AF_INET, _socket.SOCK_DGRAM, _socket.IPPROTO_UDP)
            sock.setsockopt(_socket.SOL_SOCKET, _socket.SO_REUSEADDR, 1)
            sock.bind(("",port))
            if ismulticast:
                mreq=struct.pack('4s4s',_socket.inet_aton(mgroup),_socket.inet_aton(hostip))
                sock.setsockopt(_socket.IPPROTO_IP, _socket.IP_ADD_MEMBERSHIP, mreq)
                print "Capturing Socket Interface: (MULTICAST) Host Interface: " + hostip + " Multicast: " + mgroup + " Port: "+ str(port)
            else:
                print "Capturing Socket Interface: (UDP) Host Interface: " + hostip + " Source Address: " + mgroup + " Port: "+ str(port)
            ncnt=0
            while totalRead < requestedBytes:
                rcvddata = sock.recv(blen,_socket.MSG_WAITALL)
                rawdata=rawdata+rcvddata
                data=data+list(rcvddata)
                totalRead = totalRead + len(rcvddata)
                ncnt += 1
                print " read ", ncnt, " pkt ", len(rcvddata)
        except KeyboardInterrupt,e :
            traceback.print_exc()
            print "Exception during packet capture: " + str(e)
        except Exception, e :
            traceback.print_exc()
            print "Exception during packet capture: " + str(e)
        finally:
            endTime=_time.time()
            deltaTime=endTime -startTime            
        if sock: sock.close()
        print "Elapsed Time: ", deltaTime, "  Total Data (kB): ", totalRead/1000.0, " Rate (kBps): ", (totalRead/1000.0)/deltaTime
        if returnSddsAnalyzer:
            from ossie.utils.sdds import SDDSAnalyzer
            return SDDSAnalyzer( rawdata, pkts, pktlen, totalRead )
        else:
            return data, rawdata, (pktlen,pkts,totalRead)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号