File: sockread.py

package info (click to toggle)
tstools 1.13~git20151030-6
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 2,916 kB
  • sloc: ansic: 37,970; java: 2,243; makefile: 466; python: 319; sh: 5
file content (87 lines) | stat: -rw-r--r-- 2,406 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#! /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