F5OEO-tstools/sockread.py

88 wiersze
2.3 KiB
Python

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

#! /usr/bin/env python
"""sockread.py -- a simple client to read from a socket
"""
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is the MPEG TS, PS and ES tools.
#
# The Initial Developer of the Original Code is Amino Communications Ltd.
# Portions created by the Initial Developer are Copyright (C) 2008
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Amino Communications Ltd, Swavesey, Cambridge UK
#
# ***** END LICENSE BLOCK *****
import sys
import socket
class DoneException(Exception):
pass
def get_packet(sock,packet_size=188):
"""Read a packet from the socket, coping with partial reads.
"""
data = ""
total = 0
while total < packet_size:
data += sock.recv(packet_size - total)
if len(data) == 0:
raise DoneException
total += len(data)
return data
def read_next_packet(sock,f=None):
"""Read the next packet from the socket, checking and counting it.
"""
data = get_packet(sock)
if ord(data[0]) == 0x47 and len(data) == 188:
sys.stdout.write(".")
else:
sys.stdout.write("[%x]/%d"%(ord(data[0]),len(data)))
sys.stdout.flush()
if f:
f.write(data)
def main():
total_packets = 0
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print "Waiting on port 8889"
sock.bind(("localhost",8889))
sock.listen(1)
conn, addr = sock.accept()
print 'Connected by', addr
#print "Writing to file temp.ts"
#stream = file("temp.ts","wb")
stream = None
try:
while 1:
read_next_packet(conn,stream)
total_packets += 1
except DoneException:
#stream.close()
pass
sys.stdout.write("\n")
sys.stdout.write("Total packets: %d\n"%total_packets)
sock.close()
if __name__ == "__main__":
# try:
main()
# except KeyboardInterrupt:
# print