[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