Witam,
Mam problem jako nowicjusz w dziedzinie programowania - jak prawidłowo odczytać /przesortować złapać / strumień danych z wykorzystaniem socket. recv() ? Python 3x pod windowsem.
Z serwera są wysyłane dwa strumienie danych w sposób asynchroniczny ale ze średnią prędkością ~10x na sekundę.
Obecnie odczytuje je za pomocą takiego kawałka kodu .:
(....)
s.connect(("192.168.1.115", 3333))
sc.connect(("192.168.1.115", 3300))
if __name__ == '__main__':
while True:
licznik +=1
msg=''
msg=s.recv(67)
if msg.startswith(b'!!')== True:
msg1=sc.recv(8)
msg1=msg1.decode("utf-8")
print(f" dlugosc: {msg1[:7]}")
msg=msg.decode("utf-8")
#msg1=msg1.decode("utf-8")
#msg=msg.rstrip()
print(msg,end='\n')
print(msg1,end='\n')
if licznik >=10:
s.close()
sc.close()
s.connect(("192.168.1.115", 3333))
sc.connect(("192.168.1.115", 3300))
#break
Jeden ze strumieni danych zaczyna się od "preambuły" i kończy za pomocą wyraźnego zestawu znaków.
!!;21:57:56.440; 4528 ; 4784 ; 4384 ; 3920 ;57.775;1;1;## \n\r
!!;21:57:56.520; 4528 ; 4784 ; 4384 ; 3920 ;57.775;1;1;## \n\r
!!;21:57:56.680; 4528 ; 4784 ; 4384 ; 3920 ;57.775;1;1;## \n\r
Drugi strumień nie ma "preambuły" kończy się natomiast zawsze znakami \n\r
0.082\n\r
-0.022\n\r
11.001\n\r
**Problem **- zmiana długości danych wejściowych powoduje rozjechanie się całości programu. W pierwszym strumieniu nie mogę zagwarantować że to będzie 67 bitów - w drugim to samo czasem 7 czasem 10.
Jak prawidłowo złapać te dane (logikę rozumem że trzeba mieć bufor większy niż to co chce odczytać ale jak to posortować i ew skleić do jednego print'a ?)