##// END OF EJS Templates
imanay -
r131:132
parent child
Show More
@@ -1,527 +1,537
1 1 # Needed for the FilesStuff class
2 2 import os
3 3 import numpy as np
4 4 # Needed for the TCPComm class
5 5 import socket
6 6
7 7 class TCPComm:
8 8
9 9 __HEADER = "JRO"
10 10 __TYPE = "ABS"
11 11
12 12 def __init__(self, ipSource, iDSource, ipDestino, iDDestino, portDestino, asServer=False):
13 13
14 14 self.ipSource = ipSource
15 15 self.iDSource = iDSource
16 16 self.ipDestino = ipDestino
17 17 self.iDDestino = iDDestino
18 18 self.portDestino = portDestino
19 19 self.addr = (ipDestino,portDestino)
20 20
21 21 self.sc = "none"
22 22 self.answer = "none" #test
23 23 self.asServer = False
24 24 self.len = "000000"
25 25 self.crc = "0"
26 26
27 27 self.openSocket(asServer)
28 28
29 29 def openSocket(self, asServer):
30 30
31 31 #self.socket_c = socket.socket(AF_INET,SOCK_DGRAM)
32 32 # self.socket_c = socket.socket()
33 33 # self.socket_c.connect((self.ipDestino, self.portDestino))
34 34
35 35 if asServer:
36 36 self.socket_c = socket.socket()
37 37 # self.configAsServer()
38 38 self.socket_c.bind(self.addr)
39 39 self.asServer = True
40 40 else:
41 41 # self.configAsClient()
42 42 self.asServer = False #Socket is opened at the sendData function
43 43
44 44 # def configAsClient(self):
45 45 #Buscar broadcast TCP
46 46 # self.socket_c.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
47 47 # self.socket_c.connect(self.addr)
48 48 # pass
49 49
50 50 # def configAsServer(self):
51 51 #
52 52 # self.socket_c.bind(self.addr)
53 53
54 54 def waitData(self):
55 55 if self.asServer == True:
56 56 trama_rx, l = self.waitAsServer()
57 57 else:
58 58 trama_rx, l = self.waitAsClient()
59 59
60 60 ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx, l)
61 61
62 62 return ipSource, ipDestino, cmd, data
63 63
64 64 def waitAsClient2(self, nbytes = 1024):
65 65 print "\nWaiting the server."
66 66 # Short data through ethernet
67 67 trama_rx = self.socket_c.recv(nbytes)
68 68 print "\nThis socket has received this data: " + str(trama_rx)
69 69
70 70 return trama_rx
71 71
72 72 def waitAsServer2(self, nbytes = 1024):
73 73 print "\nWaiting some client."
74 74 self.socket_c.listen(1)
75 75 sc, addr = self.socket_c.accept()
76 76 self.sc = sc
77 77 self.answer = addr
78 78 # Big data through ethernet
79 79 trama_rx = ""
80 80 while True:
81 81 tmp = self.sc.recv(nbytes)
82 82 trama_rx = trama_rx + tmp
83 83 if trama_rx[-4:] == "quit":
84 84 break
85 85
86 86 print "\nThis socket has received some data from: " + str(self.answer)
87 87
88 88 return trama_rx
89 89
90 90 def waitAsServer(self, nbytes = 1024):
91 91 print "\nWaiting some client."
92 92 self.socket_c.listen(1)
93 93 sc, addr = self.socket_c.accept()
94 94 self.sc = sc
95 95 self.answer = addr
96 96 # Big data through ethernet
97 97 cnt = 0;
98 98 first = 0;
99 99 trama_rx = ""
100 100 while True:
101 101 tmp = self.sc.recv(nbytes)
102 102 trama_rx = trama_rx + tmp
103 103 cnt = len(trama_rx)
104 104 if first == 0:
105 105 first = 1
106 106 lng = int(trama_rx[20:26])
107 107 frm_lng= lng + 31 # 31 bytes are fixed and added to the data size to get the frame size
108 108 if cnt == frm_lng:
109 109 break
110 110
111 111 print "\nThis socket has received some data from: " + str(self.answer)
112 112
113 113 return trama_rx, lng
114 114
115 115 def waitAsClient(self, nbytes = 1024):
116 116 print "\nWaiting the server."
117 117 # Short data through ethernet
118 trama_rx = self.socket_c.recv(nbytes)
119 lng = int(trama_rx[20:26])
120 print "\nThis socket has received this data: " + str(trama_rx)
121
118 try:
119 trama_rx = self.socket_c.recv(nbytes)
120 lng = int(trama_rx[20:26])
121 except:
122 print "Waiting error"
123 trama_rx = "Error"
124 lng = 0
125 else:
126 print "\nThis socket has received this data: " + str(trama_rx)
127
122 128 return trama_rx, lng
123 129
124 130 def sendData2(self, cmd, data, ipDestino):
125 131
126 132 trama_tx = self.__HEADER + ":" + self.__TYPE + ":" + str(self.ipSource) + ":" + str(ipDestino) + \
127 133 ":" + str(self.len) + ":" + str(cmd) + ":" + str(data) + ":" + str(self.crc) + ":" + "quit"
128 134
129 135 if self.asServer == True:
130 136 self.SendAsServer(trama_tx)
131 137 else:
132 138 self.SendAsClient(ipDestino, trama_tx)
133 139
134 140 def sendData(self, cmd, data, ipDestino):
135 141
136 142 trama_tx = self.__HEADER + self.__TYPE + self.iDSource + \
137 143 self.iDDestino + self.len + str(cmd) + str(data) + self.crc
138 144
139 145 self.len = self.int2str(len(data))
140 146
141 147 trama_tx = self.__HEADER + self.__TYPE + self.iDSource + \
142 148 self.iDDestino + self.len + str(cmd) + str(data) + self.crc
143 149
144 150 if self.asServer == True:
145 151 self.SendAsServer(trama_tx)
146 152 else:
147 153 self.SendAsClient(ipDestino, trama_tx)
148 154
149 155 def SendAsServer(self, trama_tx):
150 156
151 157 self.sc.send(trama_tx)
152 158 print "Sending message:[" + trama_tx + "] to: " + str(self.answer)
153 159
154 160
155 161 def SendAsClient(self, ipDestino, trama_tx):
156
157 self.socket_c.connect((ipDestino, self.portDestino))
158 self.socket_c.send(trama_tx)
159 print "Sending message:[" + trama_tx + "] to: " + ipDestino
162
163 try:
164 self.socket_c.connect((ipDestino, self.portDestino))
165 except:
166 print "Connection error with:" + ipDestino
167 else:
168 self.socket_c.send(trama_tx)
169 print "Sending message:[" + trama_tx + "] to: " + ipDestino
160 170
161 171 def __getTrama2(self, trama):
162 172
163 173 FrameList = trama.split(':')
164 174
165 175 header = FrameList[0]
166 176 TypeOfInstrument = FrameList[1]
167 177 ipSource = FrameList[2]
168 178 ipDestino = FrameList[3]
169 179 len = FrameList[4]
170 180 cmd = FrameList[5]
171 181 data = FrameList[6]
172 182 crc = FrameList[7]
173 183 trash = FrameList[8]
174 184
175 185 return ipSource, ipDestino, cmd, data
176 186
177 187 def __getTrama(self, trama, l):
178 188
179 189 header = trama[0:3]
180 190 TypeOfInstrument = trama[3:6]
181 191 ipSource = trama[6:13]
182 192 ipDestino = trama[13:20]
183 193 len = trama[20:26]
184 194 cmd = trama[26:30]
185 195 data = trama[30:30+int(l)]
186 196 crc = trama[30+ int(l):]
187 197
188 198 return ipSource, ipDestino, cmd, data
189 199
190 200 def close_socket(self):
191 201 self.socket_c.close()
192 202
193 203 def open_socket(self):
194 204 self.socket_c = socket.socket()
195 205
196 206 def int2str(self, n):
197 207
198 208 str_n = str(n)
199 209 l_n = len(str_n)
200 210 if l_n == 1:
201 211 str_n = "00000" + str_n
202 212 elif l_n == 2:
203 213 str_n = "0000" + str_n
204 214 elif l_n == 3:
205 215 str_n = "000" + str_n
206 216 elif l_n == 4:
207 217 str_n = "00" + str_n
208 218 elif l_n == 5:
209 219 str_n = "0" + str_n
210 220 return str_n
211 221
212 222 class FilesStuff():
213 223
214 224 def lst2string(self, lst):
215 225 string=''
216 226 for i in lst:
217 227 string=string+i
218 228 return string
219 229
220 230 def string2lst(self, string):
221 231 lst = []
222 232 for i in string:
223 233 lst.append(i)
224 234 return lst
225 235
226 236
227 237 def file1(self, filename, type):
228 238 lst = self.string2lst(filename)
229 239 fin = -1
230 240 t = len(lst)
231 241 for i in np.arange(-1,-t,-1):
232 242 if lst[i]=='/':
233 243 fin=i
234 244 break
235 245 if type == '1':
236 246 nombre2 = lst[fin+1:]
237 247 nombre2[-1]='s'
238 248 nombre2 = self.lst2string(nombre2)
239 249 return nombre2
240 250 if type == '2':
241 251 nombre2 = lst[fin+1:]
242 252 nombre2[-1]='1'
243 253 nombre2 = self.lst2string(nombre2)
244 254 return nombre2
245 255
246 256
247 257 def EliminaSaltoDeLinea(self,cadena):
248 258 i = 0
249 259 for elemento in cadena:
250 260 if elemento =='\n' or elemento =='\r':
251 261 pass
252 262 else:
253 263 i=i+1
254 264 return cadena [:i]
255 265
256 266 def NumeroDeExperimentos(self, path):
257 267 fichero1=open(path,'r')
258 268 cont=0
259 269 for cadena in fichero1:
260 270 cont=cont+1
261 271 if cont==3:
262 272 nexp=''
263 273 pos=0
264 274 for elemento in cadena:
265 275 pos=pos+1
266 276 if elemento=='=':
267 277 nexp=int(cadena[pos:])
268 278 return nexp
269 279 fichero1.close()
270 280
271 281 def Paridad(numero):
272 282 if numero%2==0: return 'par'
273 283 elif numero%2==1: return 'impar'
274 284
275 285 def EvaluaCadena(self,cadena):
276 286 if len(cadena)>35:
277 287 if cadena[-1]=='$':
278 288 return cadena[-35:-2]
279 289 elif cadena[-1]==']':
280 290 return cadena[-34:-1]
281 291 else:
282 292 return None
283 293
284 294 def GuardaEnLista(self,path):
285 295 fichero=open(path,'r')
286 296 lista=[]
287 297 for cadena in fichero:
288 298 cadena = self.EliminaSaltoDeLinea(cadena)
289 299 cadena = self.EvaluaCadena(cadena)
290 300 if cadena != None:
291 301 lista.append(cadena)
292 302 fichero.close()
293 303 return lista
294 304
295 305 def CreaFicherosPrevios(self, path, archivo):
296 306 vector = self.GuardaEnLista(archivo)
297 307 for i in range(1,self.NumeroDeExperimentos(archivo)+1):
298 308 fichero =open(path + str(i)+ '.txt','w')
299 309 for j in range(0,16):
300 310 fichero.write(vector[j+16*(i-1)]+'\n')
301 311 fichero.close()
302 312
303 313 def CapturaValoresEnArchivo(self, path, polarizacion='up'):
304 314 fichero =open(path,'r')
305 315 cnt=0
306 316 lstup=[]
307 317 lstdw=[]
308 318 for cadena in fichero:
309 319 cnt=cnt+1
310 320 if cnt==1:
311 321 nu01=cadena[1:4]
312 322 nu02=cadena[5:8]
313 323 nu03=cadena[9:12]
314 324 nu04=cadena[13:16]
315 325 eu01=cadena[17:20]
316 326 eu02=cadena[21:24]
317 327 eu03=cadena[25:28]
318 328 eu04=cadena[29:32]
319 329 if cnt==2:
320 330 nu05=cadena[1:4]
321 331 nu06=cadena[5:8]
322 332 nu07=cadena[9:12]
323 333 nu08=cadena[13:16]
324 334 eu05=cadena[17:20]
325 335 eu06=cadena[21:24]
326 336 eu07=cadena[25:28]
327 337 eu08=cadena[29:32]
328 338 if cnt==3:
329 339 nu09=cadena[1:4]
330 340 nu10=cadena[5:8]
331 341 nu11=cadena[9:12]
332 342 nu12=cadena[13:16]
333 343 eu09=cadena[17:20]
334 344 eu10=cadena[21:24]
335 345 eu11=cadena[25:28]
336 346 eu12=cadena[29:32]
337 347 if cnt==4:
338 348 nu13=cadena[1:4]
339 349 nu14=cadena[5:8]
340 350 nu15=cadena[9:12]
341 351 nu16=cadena[13:16]
342 352 eu13=cadena[17:20]
343 353 eu14=cadena[21:24]
344 354 eu15=cadena[25:28]
345 355 eu16=cadena[29:32]
346 356 if cnt==5:
347 357 wu01=cadena[1:4]
348 358 wu02=cadena[5:8]
349 359 wu03=cadena[9:12]
350 360 wu04=cadena[13:16]
351 361 su01=cadena[17:20]
352 362 su02=cadena[21:24]
353 363 su03=cadena[25:28]
354 364 su04=cadena[29:32]
355 365 if cnt==6:
356 366 wu05=cadena[1:4]
357 367 wu06=cadena[5:8]
358 368 wu07=cadena[9:12]
359 369 wu08=cadena[13:16]
360 370 su05=cadena[17:20]
361 371 su06=cadena[21:24]
362 372 su07=cadena[25:28]
363 373 su08=cadena[29:32]
364 374 if cnt==7:
365 375 wu09=cadena[1:4]
366 376 wu10=cadena[5:8]
367 377 wu11=cadena[9:12]
368 378 wu12=cadena[13:16]
369 379 su09=cadena[17:20]
370 380 su10=cadena[21:24]
371 381 su11=cadena[25:28]
372 382 su12=cadena[29:32]
373 383 if cnt==8:
374 384 wu13=cadena[1:4]
375 385 wu14=cadena[5:8]
376 386 wu15=cadena[9:12]
377 387 wu16=cadena[13:16]
378 388 su13=cadena[17:20]
379 389 su14=cadena[21:24]
380 390 su15=cadena[25:28]
381 391 su16=cadena[29:32]
382 392 if cnt==9:
383 393 nd01=cadena[1:4]
384 394 nd02=cadena[5:8]
385 395 nd03=cadena[9:12]
386 396 nd04=cadena[13:16]
387 397 ed01=cadena[17:20]
388 398 ed02=cadena[21:24]
389 399 ed03=cadena[25:28]
390 400 ed04=cadena[29:32]
391 401 if cnt==10:
392 402 nd05=cadena[1:4]
393 403 nd06=cadena[5:8]
394 404 nd07=cadena[9:12]
395 405 nd08=cadena[13:16]
396 406 ed05=cadena[17:20]
397 407 ed06=cadena[21:24]
398 408 ed07=cadena[25:28]
399 409 ed08=cadena[29:32]
400 410 if cnt==11:
401 411 nd09=cadena[1:4]
402 412 nd10=cadena[5:8]
403 413 nd11=cadena[9:12]
404 414 nd12=cadena[13:16]
405 415 ed09=cadena[17:20]
406 416 ed10=cadena[21:24]
407 417 ed11=cadena[25:28]
408 418 ed12=cadena[29:32]
409 419 if cnt==12:
410 420 nd13=cadena[1:4]
411 421 nd14=cadena[5:8]
412 422 nd15=cadena[9:12]
413 423 nd16=cadena[13:16]
414 424 ed13=cadena[17:20]
415 425 ed14=cadena[21:24]
416 426 ed15=cadena[25:28]
417 427 ed16=cadena[29:32]
418 428 if cnt==13:
419 429 wd01=cadena[1:4]
420 430 wd02=cadena[5:8]
421 431 wd03=cadena[9:12]
422 432 wd04=cadena[13:16]
423 433 sd01=cadena[17:20]
424 434 sd02=cadena[21:24]
425 435 sd03=cadena[25:28]
426 436 sd04=cadena[29:32]
427 437 if cnt==14:
428 438 wd05=cadena[1:4]
429 439 wd06=cadena[5:8]
430 440 wd07=cadena[9:12]
431 441 wd08=cadena[13:16]
432 442 sd05=cadena[17:20]
433 443 sd06=cadena[21:24]
434 444 sd07=cadena[25:28]
435 445 sd08=cadena[29:32]
436 446 if cnt==15:
437 447 wd09=cadena[1:4]
438 448 wd10=cadena[5:8]
439 449 wd11=cadena[9:12]
440 450 wd12=cadena[13:16]
441 451 sd09=cadena[17:20]
442 452 sd10=cadena[21:24]
443 453 sd11=cadena[25:28]
444 454 sd12=cadena[29:32]
445 455 if cnt==16:
446 456 wd13=cadena[1:4]
447 457 wd14=cadena[5:8]
448 458 wd15=cadena[9:12]
449 459 wd16=cadena[13:16]
450 460 sd13=cadena[17:20]
451 461 sd14=cadena[21:24]
452 462 sd15=cadena[25:28]
453 463 sd16=cadena[29:32]
454 464 blck_1_up = [nu01,nu02,nu03,nu04,eu01,eu02,eu03,eu04,nu05,nu06,nu07,nu08,eu05,eu06,eu07,eu08]
455 465 blck_1_dw = [nd01,nd02,nd03,nd04,ed01,ed02,ed03,ed04,nd05,nd06,nd07,nd08,ed05,ed06,ed07,ed08]
456 466 blck_2_up = [nu09,nu10,nu11,nu12,eu09,eu10,eu11,eu12,nu13,nu14,nu15,nu16,eu13,eu14,eu15,eu16]
457 467 blck_2_dw = [nd09,nd10,nd11,nd12,ed09,ed10,ed11,ed12,nd13,nd14,nd15,nd16,ed13,ed14,ed15,ed16]
458 468 blck_3_up = [wu01,wu02,wu03,wu04,su01,su02,su03,su04,wu05,wu06,wu07,wu08,su05,su06,su07,su08]
459 469 blck_3_dw = [wd01,wd02,wd03,wd04,sd01,sd02,sd03,sd04,wd05,wd06,wd07,wd08,sd05,sd06,sd07,sd08]
460 470 blck_4_up = [wu09,wu10,wu11,wu12,su09,su10,su11,su12,wu13,wu14,wu15,wu16,su13,su14,su15,su16]
461 471 blck_4_dw = [wd09,wd10,wd11,wd12,sd09,sd10,sd11,sd12,wd13,wd14,wd15,wd16,sd13,sd14,sd15,sd16]
462 472
463 473 lstup = blck_1_up + blck_2_up + blck_3_up + blck_4_up
464 474 lstdw = blck_1_dw + blck_2_dw + blck_3_dw + blck_4_dw
465 475
466 476 if polarizacion=='up':
467 477 return lstup
468 478 elif polarizacion=='dw':
469 479 return lstdw
470 480 fichero.close()
471 481
472 482 def CreaFormatoFinal(self, path, filename):
473 483 ne=self.NumeroDeExperimentos(filename)
474 484
475 485 #nombre01 = file1(archivo,'1')
476 486 nombre02 = self.file1(filename,'2')
477 487 fichero=open(path + 'CentralControlFormat.txt','w')
478 488 fichero.write(nombre02+'\n')
479 489 fichero.write(str(ne)+'\n')
480 490
481 491 for i in range(1,65):
482 492
483 493 if i<10:
484 494 nmod = '0'+str(i)
485 495 else: nmod = str(i)
486 496
487 497 fichero.write("ABS_" + nmod+'\n')
488 498
489 499 for j in range(1,ne+1):
490 500 ruta=path+str(j)+'.txt'
491 501 lu=self.CapturaValoresEnArchivo(ruta,polarizacion='up')
492 502 ld=self.CapturaValoresEnArchivo(ruta,polarizacion='dw')
493 503 part1=''
494 504 part2=''
495 505 if lu[i-1]=='1.0': part1='000'
496 506 if lu[i-1]=='2.0': part1='001'
497 507 if lu[i-1]=='3.0': part1='010'
498 508 if lu[i-1]=='0.0': part1='011'
499 509 if lu[i-1]=='0.5': part1='100'
500 510 if lu[i-1]=='1.5': part1='101'
501 511 if lu[i-1]=='2.5': part1='110'
502 512 if lu[i-1]=='3.5': part1='111'
503 513 if ld[i-1]=='1.0': part2='000'
504 514 if ld[i-1]=='2.0': part2='001'
505 515 if ld[i-1]=='3.0': part2='010'
506 516 if ld[i-1]=='0.0': part2='011'
507 517 if ld[i-1]=='0.5': part2='100'
508 518 if ld[i-1]=='1.5': part2='101'
509 519 if ld[i-1]=='2.5': part2='110'
510 520 if ld[i-1]=='3.5': part2='111'
511 521 fichero.write(part1+part2+'\n')
512 522 fichero.write('------'+'\n')
513 523 fichero.close()
514 524
515 525 def EliminaArchivosEnLaCarpeta(self, path, filename):
516 526 ne=self.NumeroDeExperimentos(filename)
517 527 for i in range(1,ne+1):
518 528 os.remove(path + str(i)+'.txt')
519 529
520 530
521 531 def toCentralControlFormat(self, filename):
522 532 """ Funcion que genera un archivo para el control central"""
523 533
524 534 path = os.getcwd() + '/'
525 535 self.CreaFicherosPrevios(path, filename)
526 536 self.CreaFormatoFinal(path, filename)
527 537 self.EliminaArchivosEnLaCarpeta(path, filename)
@@ -1,8 +1,8
1 1 import file
2 2 from client3 import *
3 3
4 ns = "0"
4 opt = "0"
5 5
6 6 absObj = ABSClient(ipDestino="10.10.10.97")
7 7 #absObj = ABSClient()
8 absObj.getControlModulePhase(ns) No newline at end of file
8 absObj.getControlModulePhase(opt) No newline at end of file
@@ -1,66 +1,66
1 1 Status of modules
2 2 ----------------
3 3 192.168.1.1 [1 1]
4 4 192.168.1.2 [0 0]
5 5 192.168.1.3 [0 0]
6 6 192.168.1.4 [0 0]
7 7 192.168.1.5 [0 0]
8 8 192.168.1.6 [0 0]
9 9 192.168.1.7 [0 0]
10 10 192.168.1.8 [0 0]
11 11 192.168.1.9 [0 0]
12 12 192.168.1.10 [0 0]
13 13 192.168.1.11 [0 0]
14 192.168.1.12 [0 0]
14 192.168.1.12 [1 1]
15 15 192.168.1.13 [0 0]
16 16 192.168.1.14 [0 0]
17 17 192.168.1.15 [0 0]
18 18 192.168.1.16 [0 0]
19 19 192.168.1.17 [0 0]
20 20 192.168.1.18 [0 0]
21 21 192.168.1.19 [0 0]
22 22 192.168.1.20 [0 0]
23 23 192.168.1.21 [0 0]
24 24 192.168.1.22 [0 0]
25 25 192.168.1.23 [0 0]
26 26 192.168.1.24 [0 0]
27 27 192.168.1.25 [0 0]
28 28 192.168.1.26 [0 0]
29 29 192.168.1.27 [0 0]
30 30 192.168.1.28 [0 0]
31 31 192.168.1.29 [0 0]
32 32 192.168.1.30 [0 0]
33 33 192.168.1.31 [0 0]
34 34 192.168.1.32 [0 0]
35 35 192.168.1.33 [0 0]
36 36 192.168.1.34 [0 0]
37 37 192.168.1.35 [0 0]
38 38 192.168.1.36 [0 0]
39 39 192.168.1.37 [0 0]
40 40 192.168.1.38 [0 0]
41 41 192.168.1.39 [0 0]
42 42 192.168.1.40 [0 0]
43 43 192.168.1.41 [0 0]
44 44 192.168.1.42 [0 0]
45 45 192.168.1.43 [0 0]
46 46 192.168.1.44 [0 0]
47 47 192.168.1.45 [0 0]
48 48 192.168.1.46 [0 0]
49 49 192.168.1.47 [0 0]
50 50 192.168.1.48 [0 0]
51 51 192.168.1.49 [0 0]
52 52 192.168.1.50 [0 0]
53 53 192.168.1.51 [0 0]
54 54 192.168.1.52 [0 0]
55 55 192.168.1.53 [0 0]
56 56 192.168.1.54 [0 0]
57 57 192.168.1.55 [0 0]
58 58 192.168.1.56 [0 0]
59 59 192.168.1.57 [0 0]
60 60 192.168.1.58 [0 0]
61 61 192.168.1.59 [0 0]
62 62 192.168.1.60 [0 0]
63 63 192.168.1.61 [0 0]
64 64 192.168.1.62 [0 0]
65 65 192.168.1.63 [0 0]
66 66 192.168.1.64 [0 0]
General Comments 0
You need to be logged in to leave comments. Login now