Пока что отложил это дело с несколькими подключениями. Такой вопрос:
сейчас код, который принимает байты, выглядит следующим образом:
import time, traceback
import threading
import SocketServer
import datetime
from threading import Thread
byte1 = 54
byte2 = 56
class CaaTHandler(SocketServer.StreamRequestHandler):
def handle(self):
self.request.settimeout(1)
global byte1
global byte2
while 1:
# c = self.rfile.read(1)
c = self.request.recv(1)
if len(c)!=0:
print "read %d bytes: %r" % (len(c), c)
if len(c)!=0:
print "not empty!"
if c=="\n":
print "got cr"
c = self.request.recv(1)
if len(c)!=0:
byte1=ord(c)
print "got byte2"
print c
print byte1
c = self.request.recv(1)
if len(c)!=0:
print "got byte2"
print c
byte2=ord(c)
print byte2
оно все отлично работает, если туда стучать через телнет или через неткат. принимает байты, обновляет, нормально закрывается и все такое. и реальный таймаут 1 с - выкидывает после бездейтсвия.
но когда начал делать приложение для андроида - у меня вдруг все стало плохо: питон стал загружать процессор, скрипт не работает, во всяком случае на прием. очевидно, что андроид как-то некорректно завершает программу (я в дебаге его запускаю и в дебаге же останавливаю, там некий сервис крутится)
попробовал посмотреть с помощью tcpdump и вот какие получились последние три секунды:
192.168.1.18.50008 > 192.168.1.101.40073: Flags , cksum 0x3da4 (correct), seq 1, ack 22, win 4097, options , length 0
23:24:08.654737 IP (tos 0x0, ttl 64, id 20273, offset 0, flags , proto TCP (6), length 55)
192.168.1.101.40073 > 192.168.1.18.50008: Flags , cksum 0x3698 (correct), seq 22:25, ack 1, win 58, options , length 3
23:24:08.654798 IP (tos 0x0, ttl 64, id 59531, offset 0, flags , proto TCP (6), length 52)
192.168.1.18.50008 > 192.168.1.101.40073: Flags , cksum 0x6782 (correct), seq 1, ack 25, win 4097, options , length 0
23:24:09.354462 IP (tos 0x0, ttl 64, id 20274, offset 0, flags , proto TCP (6), length 55)
192.168.1.101.40073 > 192.168.1.18.50008: Flags , cksum 0x34c1 (correct), seq 25:28, ack 1, win 58, options , length 3
23:24:09.354489 IP (tos 0x0, ttl 64, id 31043, offset 0, flags , proto TCP (6), length 52)
192.168.1.18.50008 > 192.168.1.101.40073: Flags , cksum 0x6503 (correct), seq 1, ack 28, win 4096, options , length 0
23:24:10.059348 IP (tos 0x0, ttl 64, id 20275, offset 0, flags , proto TCP (6), length 55)
192.168.1.101.40073 > 192.168.1.18.50008: Flags , cksum 0x3241 (correct), seq 28:31, ack 1, win 58, options , length 3
23:24:10.059373 IP (tos 0x0, ttl 64, id 3498, offset 0, flags , proto TCP (6), length 52)
192.168.1.18.50008 > 192.168.1.101.40073: Flags , cksum 0x628a (correct), seq 1, ack 31, win 4096, options , length 0
23:24:10.480374 IP (tos 0x0, ttl 64, id 20276, offset 0, flags , proto TCP (6), length 52)
192.168.1.101.40073 > 192.168.1.18.50008: Flags , cksum 0x7224 (correct), seq 31, ack 1, win 58, options , length 0
23:24:10.480411 IP (tos 0x0, ttl 64, id 52254, offset 0, flags , proto TCP (6), length 52)
192.168.1.18.50008 > 192.168.1.101.40073: Flags , cksum 0x611a (correct), seq 1, ack 32, win 4096, options , length 0
(101 - андроид, 18 - комп)
от андроида каким-то образом пришел запрос с нулевой длиной. флаг F. (кстати, что это?)
и вроде питон отправляет обчный акнолежмент.
как понять, чем отличается то, что я пишу в сокет вручную (через телнет), от того, что я пишу из андроида?
можно ли в коде питона что-то подкрутить, чтобы вот так нагло не зависало?