-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathconnections.py
114 lines (99 loc) · 3.06 KB
/
connections.py
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import socket
import threading
import time
from hartip import ReceiveFromSocket
REC_BUFFER_SIZE = 2048
class ServerConnection():
'''
initiate
'''
def __init__(self,port,threads):
self.host = ''
self.port = port
self.threads = threads
'''
TCP Server
'''
def open_socket_with_TCP(self):
try:
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.bind((self.host,self.port))
self.server.listen(self.threads)
except socket.error, (value,message):
if self.server:
self.server.close()
print "Could not open socket: " + message
sys.exit(1)
'''
UDP Server
'''
def open_socket_with_UDP(self):
try:
self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.server.bind((self.host,self.port))
self.server.listen(5)
except socket.error, (value,message):
if self.server:
self.server.close()
print "Could not open socket: " + message
sys.exit(1)
'''
inspect the ip address is ipv4 or not
'''
def is_valid_ipv4_address(self,address):
try:
addr= socket.inet_pton(socket.AF_INET, address)
except AttributeError: # no inet_pton here, sorry
try:
addr= socket.inet_aton(address)
except socket.error:
return False
return address.count('.') == 3
except socket.error: # not a valid address
return False
return True
'''
inspect the ip address is ipv6 or not
'''
def is_valid_ipv6_address(self,address):
try:
addr= socket.inet_pton(socket.AF_INET6, address)
except socket.error: # not a valid address
return False
return True
'''
initiate the socket connection,and start the listenning thread
'''
def run(self):
self.open_socket_with_TCP()
while True:
c = ClientConnection(self.server.accept())
print c.client,c.addr
c.start()
class ClientConnection(threading.Thread):
'''
client:socket.accept return the socket connection
addr :socket.accept return the source address
'''
def __init__(self,(client,addr)):
threading.Thread.__init__(self)
self.client = client
self.addr = addr
self.size = REC_BUFFER_SIZE
self.timeoutcnt = 0
self.timeoutval = 180
'''
ovrerride the run method
'''
def run(self):
while True:
try:
rec_data = self.client.recv(self.size)
ReceiveFromSocket(rec_data,self.client)
if not rec_data: break
except Exception as e:
print e
self.client.close()
break
print 'over'
self.client.close()