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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/usr/bin/env python
#-*-coding:UTF-8-*-
"""
@Item   :  Socket learing
@Author :  William
@Group  :  DEV Group
@Date   :  2013-10-16
@Funtion:
 
"""
 
import  sys,os,time,redis,traceback,json,threading,socket
from  cloud.hsnovnc  import  utils
from  cloud  import  log
LOG  =  log.get_logger(__name__)
 
class  MySocket( object ):
     def  __init__( self , proto  =  0 ):
         if  proto  = =  0 :
             self .sock  =  socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             self .sock.setblocking( True )
         else :
             self .sock  =  socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
         self .sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,  1 )
     # The socket binding host and port
     def  my_bind( self , host, port):
         try :
             self .sock.bind((host, port))
         except  socket.error, e:
             LOG.error(e)
             return  -  1
         return  0
     #listen TCP port ,default
     def  my_listen( self , num  =  1024 ):
         try :
             self .sock.listen(num)
         except  socket.error, e:
             LOG.error(e)
             return  -  1
         return  0
     #connect setting timeout
     def  my_connect( self , host, port, time_out  =  - 1 ):
         try :
             if  time_out  = =  - 1 :
                 self .sock.setblocking( 1 )
             else :
                 self .sock.settimeout(time_out)
             self .sock.connect((host, port))
         except  socket.error, e:
             LOG.error(e)
             return  -  1
         return  0
     #accept teturn client address
     def  my_accept( self , time_out  =  - 1 ):
         addr  =  []
         try :
             if  time_out  = =  - 1 :
                 self .sock.setblocking( 1 )
             else :
                 self .sock.settimeout(time_out)
             client_sock, addr  =  self .sock.accept()
         except  socket.error, e:
             LOG.error(e)
         return  client_sock, addr
     #recv setting timeout
     def  my_recv( self , buf_size, time_out  =  - 1 ):
         buf  =  ''
         try :
             if  time_out  = =  - 1 :
                 self .sock.setblocking( 1 )
             else :
                 self .sock.settimeout(time_out)
             buf  =  self .sock.recv(buf_size)
         except  Exception, e:
             LOG.error(e)
         return  buf
     #send setting timeout
     def  my_send( self , buf, time_out  =  - 1 ):
         try :
             if  time_out  = =  - 1 :
                 self .sock.setblocking( 1 )
             else :
                 self .sock.settimeout(time_out)
             send_len  =  self .sock.send(buf)
             return  send_len
         except  Exception, e:
             LOG.error(e)
             return  -  1
     #close
     def  my_close( self , time_out  =  - 1 ):
         try :
             if  time_out  = =  - 1 :
                 self .sock.setblocking( 1 )
             else :
                 self .sock.settimeout(time_out)
             self .sock.close()
         except  socket.error, e:
             LOG.error(e)
             return  -  1
         return  0
  
class  sock_thread(threading.Thread):
     def  __init__( self , host, port,buf):
         threading.Thread.__init__( self )
         self .host  =  host
         self .port  =  port
         self .buf  =  buf
     def  run( self ):
         sock  =  MySocket()
         sock.my_bind( self .host,  self .port)
         sock.my_listen( 20 )
         LOG.info( 'The socket has been connected' )
         while  True :
             conn, addr  =  sock.my_accept()
             while  True :
                 data  =  conn.recv( self .buf)
                 if  not  data:
                     break
                 else :
                     try :
                         data  =  json.loads(data)
                         if  data[ 'Node' ][ 'UUID' ]:
                             port  =   utils.get_vnc_port(data[ 'Node' ].get( 'UUID' , None ))
                             data[ 'Node' ][ 'port' =  port
                             LOG.info(json.dumps(data))
                             conn.send(json.dumps(data))
                         else :
                             conn.send()
                     except :
                         break
             conn.close()
         sock.my_close()
class  socket_demo( object ):
     def  __init__( self ):
         host   =   utils.get_net_ip()
         self .host  =   host
         self .port  =  10086
         self .buf  =  4096
 
     def  work( self ):
         self .sock  =  sock_thread( self .host,  self .port, self .buf)
         self .sock.start()
         time.sleep( 0.5 )
 
def  init():
     st  =  socket_demo()
     st.work()