[python] sockety - problem s HTTP spojenim
Filip Štědrosnký
regnarg na seznam.cz
Pátek Listopad 16 19:56:08 CET 2007
Zdravím,
nejsem si jistý, ale mám takový dojem, že ten kód fungovat ani nemůže.
První, co mě praštilo do očí, je řádek "exit", který, i kdyby hypoteticky
v aktuálním namespace existovala funkce exit, neudělá vůbec nic, jen na ni
získá referenci a zahodí ji. Doporučil bych importovat sys a použit
sys.exit(). Dále se mi zdá, že bez nonblocking IO není možné v jednom vlákně
načítat a posílat vstup, protože se to snadno může někde zaseknout čekáním
na vstup. Ohledně funkce recv() si nejsem jistý jak v tomhle ohledu funguje,
většinou používám socket.makefile a potom s tím pracuji jako s klasickým
soketem. Možná by také za zmínku stály moduly asyncore a asynchat, které
tyto problémy řeší systémem událostí (uznávám, vlákna jsou jednodušší, ale
řešit některé problémy s nimi je dosti netriviální).
On Pá, lis 16, 2007 at 07:37:37 +0100, Tomy novella wrote:
> Věroš: nooo ako tak citam o TCP/IP, zamotavam sa do toho hlbsie a
> hlbsie a nakoniec zistujem, ze neviem totalne nic ;-) nechapem naco
> vymysleli ten model ISO/OSI a naco rozlisuju tolko medzi tolkymi tymi
> vrstvami. kazdopadne to osvietenie tak skoro nepride :)
>
> co som sa vsak chcel spytat, je, ze:
>
> - skusam si spravit klienta na telnet, resp. chcem, aby ma to
> pripojilo na atlantis.talker.sk problemom vsak je, ze
> nefunguje(nedokaze komunikovat) ;( what`s wrong?
> -----------------------
> import socket, string
> clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> clisock.connect(('atlantis.talker.sk', 23))
>
> while 1:
> data = clisock.recv(65536) # nechce sa mi to bufferovat ;)
> for riadok in data.split('\r\n'):
> print riadok
> a = raw_input('napis text: ')
> if(a == 'qq'):
> print "ukoncujem spojenie"
> clisock.close()
> exit # ak napisem 'qq' skonci sa mi program
> clisock.send(a)
> -----------------------------
Další informace o konferenci Python