[python] vytvoření serveru

Jakub Vojáček Jakohv na seznam.cz
Úterý Srpen 15 14:03:43 CEST 2006


Jeětě by to taky šlo udělat tak že by jak říkal geon měl každý klient vlastní server, ale tady narážím na další problém

def vlastni_server(self,cislo):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        host =  'localhost'
        port = cislo
        s.bind((host, port))
        s.listen(1)
        while 1:
            con,adr=s.accept()
            con.setblocking(1)
            try:
                data=con.recv(1024)
            except:
                pass
        s.close()

ale ted nebude fungovat hra. Ten server se vytvoří, ale okno se neotevře, protože server je v cyklu while. Proto bych  potřeboval upravit kod toho serveru tak aby se mi nesekla hra. 

> ------------ Původní zpráva ------------
> Od: Jakub Vojáček <Jakohv na seznam.cz>
> Předmět: [python] vytvoření serveru
> Datum: 15.8.2006 10:04:13
> ----------------------------------------
> Ahoj
> mám takový problém se serverem. Dělám na on-line multiplayer hře. Každý si
> stáhne klienta a když bude puštěný server připojí se. Například když se někdo
> připojí tak to všem ostatním hráčům odešle
> přikaz:self.platno.create_image(x,y,image=obr)
> jak ale udělat funkci, která byčekala až na server přijde nějaká zpráva a pak by
> jí stáhla? 
> server:
> import socket
> def zapni_server():
>     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>     host =  'localhost'
>     port = 1001
>     s.bind((host, port))
>     s.listen(1)
>     print "on-line"
>     while 1:
>     
>         conn, addr = s.accept()
> 
>     
>         data = conn.recv(100000)
>            
>         print data
>         conn.send(data)
>         conn.close()
> 
>     s.close()
> zapni_server()
> 
> ###################
> klient ma dve funkce:
> def posli_rozkaz(self,co):       
>         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>         host = "localhost"
>         port = 1001
>         s.connect((host, port))
>         s.send(co)
>         s.close()
> def prijem_rozkazu(self):
> 
>         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>         host = "localhost"
>         port = 1001
>             
>         s.connect((host, port))
>         s.setblocking(0)
>         try:
>                 data= s.recv(1000000)
>                 exec(data)
>                 
>         except:
>                 pass
>         s.close()
> 
> 
> Prostě jakmile by jakýkoliv klient odeslal příkaz, hned by se u všech ostatních
> klientů zavolal funkce prijem_rozkazu()
> Blujacker
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
> 
> 
> 

Blujacker


Další informace o konferenci Python