nevím jestli je to možné v pythonu, ale potřeboval bych vytvořit přes pythona server na který by se mohl kdokoliv připojit. Abych byl konkrétnější, chtěl bych hru www.partida.wz.cz předělat na hru pro více hráčů, totiž, že by se mohli na mapě potkat a hrát spolu...
d
Fórum › Python
Vytvoření serveru
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Ahoj, mozne to urcite je (batteries included, vzpominas? ;o))...i kdyz tu hru teda neznam, ale myslim, ze by nemel byt problem...
Rozhodne ti doporucuju precist si [url=http://heather.cs.ucdavis.edu/~matloff/Python/PyNet.pdf]Tutorial on Network Programming with Python[/url], napsany profesorem Normanem Matloffem z kalifornske univerzity. Ten tutorial je napsany velice pekne...pokud by ti tedy nedelala problemy anglictina...jinak by se dalo urcite taky neco najit na ceskem webu...
EDIT: Wow, tu hru jsi delal ty jo? To si urcite nekdy vyzkousim :o) Je opensource? Asi ne co, nikde tam nevidim ke stazeni zdrojovy kod...skoda...
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
začal jsem s tou dokumentací a hned na začátku jsem narazil na problém:((
server:
# -*- coding: cp1250 -*-
# simple illustration client/server pair; client program sends a string
# to server, which echoes it back to the client (in multiple copies),
# and the latter prints to the screen
# this is the server
import socket
import sys
# create a socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# associate the socket with a port
host = 2000# can leave this blank on the server side
port = int(sys.argv[1])
s.bind((host, port))
# accept "call" from client
s.listen(1)
conn, addr = s.accept()
print 'client is at', addr
# read string from client (assumed here to be so short that one call to
# recv() is enough), and make multiple copies (to show the need for the
# "while" loop on the client side)
data = conn.recv(1000000)
data = 10000 * data
# wait for the go-ahead signal from the keyboard (shows that recv() at
# the client will block until server sends)
z = raw_input()
# now send
conn.send(data)
conn.close()
klient:
# -*- coding: cp1250 -*-
# simple illustration client/server pair; client program sends a string
# to server, which echoes it back to the client (in multiple copies),
# and the latter prints to the screen
# this is the client
import socket
import sys
# create a socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# connect to server
host = sys.argv[1] # server address
port = int(sys.argv[2]) # server port
s.connect((host, port))
s.send(sys.argv[3]) # send test string
# read echo
i = 0
while(1):
data = s.recv(1000000) # read up to 1000000 bytes
i += 1
if (i < 5):
print data
if not data: # if end of data, leave loop
break
print 'received', len(data), "bytes"
# close the connection
s.close()
a když to podle návodu pustím
python server.py 2000
to im ještě funguje,ale :
python klient.py server_machine_name 2000 abc
mi házi chybu:
C:Documents and SettingsBluPlocha>python klient.py server_machine_name 2000
Traceback (most recent call last):
File "klient.py", line 17, in ?
s.connect((host, port))
File "<string>", line 1, in connect
socket.gaierror: (11001, 'getaddrinfo failed')
děkuju za trpělivost...
EDIT:jo tu hru jsem udělal já :ok:
jestli chceš tak ti můžu poslat zdroják...
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Proc jsi u serveroveho skriptu dosadil do promenne host cislo 2000? Host ma byt retezec...v tom tutorialu to tak, jak to mas ty, nemaji...
Na zdrojak te hry bych se jen tak ze zvedavosti rad mrknul :o)
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
jo, už mi to jakštakš funguje :cigo:
tež to upravuju tak aby když napíšu něco v klientovi tak se to pošle na server a ten to ukáže...
server:
# -*- coding: cp1250 -*-
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ''
port = 3501
s.bind((host, port))
s.listen(1)
while 1:
conn, addr = s.accept()
data = conn.recv(100000)
print data
conn.send(data)
conn.close()
s.close()
klient:
# -*- coding: cp1250 -*-
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host ="192.168.123.110"
port = 3501
s.connect((host, port))
while 1:
s.send(raw_input('Zprava:'))
s.close()
pustím normálně server, to funguje
pak pustím klienta a objeví se výzva k zadání. Já zadám, pošle se to a zobrazí se to na serveru, ale pak když zase pošlu něco přes toho klienta, tak se to nezobrazi:(( ale když toho klienta restartuju tak to zase jednou funguje...
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Kdyz pro kazdou zpravu vytvoris novy socket a pak ho zase hned zavres, tak to bude fungovat tak, jak potrebujes...takze nejak takhle:
import socket
while 1:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "localhost"
port = 3501
s.connect((host, port))
s.send(raw_input('Zprava:'))
s.close()
Sockety a praci po siti se zatim nezkoumal nejak podrobne, tak nevim, jestli je to nejlepsi zpusob...mam sice v planu vytvoreni vlastni mini IM site (jen tak pro zajimavost a abych se zase neco zajimaveho naucil, nic vaznyho ;o)), ale na to se teprve chystam, ted mam spoustu prace s jinyma vecma...
Ale kdyz bys potreboval jeste neco dal, tak se klidne zeptej...neco z manualu urcite vykoumame...jak jsem rekl - i me se to totiz bude hodit...
Jo a pokud planujes multiplayer tak pocitej s tim, ze se neobejdes bez prace s thready. Ale k tomu dojdes ;o)
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
dal?? z ?ady m?ch probl?mu:
def prijem_rozkazu(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "192.168.123.110"
port = 3502
s.connect((host, port))
data = s.recv(1000000)
exec(data)
s.close()
def posli_rozkaz(self,co):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "192.168.123.110"
port = 3502
s.connect((host, port))
s.send(co)
s.close()
kdy? zavol?m:
self.posli_rozkaz("print 'ahoj'")
tak by funkce prijmi_rozkaz mela poznat ?e na server p?i?la nov? zpr?va a vykonat ji
D?k
EDIT:jak to mysl?? s t?m thread?j? jsem se zat?m tak daleko nedostal tak?e nevím co to je:(( M? ale multiplayer napad? i bez jejich pou?it?, ale to tvoje bude mo?n? leh??..
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
:error: tež jsem zkoušel připojit na server 2 klienty, ale když sem spustil toho druhého tak mi naskočilo connection refused!:grr: Ono nejde aby na jednom serveru bylo více klientů???
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
trochu jsem tohle t?ma ?e?ili s geonem p?es icq a vy?e?ili jsem ten probl?m s p?ipojen?m v?ce klient?. Takle vypad? spr?vn? server:
# -*- coding: cp1250 -*-
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ''
port = 3501
s.bind((host, port))
s.listen(1)
while 1:
conn, addr = s.accept()
data = conn.recv(100000)
print data
conn.send(data)
conn.close()
s.close()
prost? to
conn.close()
mus? b?t v cyklu while.
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Tak nevim ale nejde to napriklad i pres s.listen(1), jako ze by to bylo napr. s.listen(2) a take se mi zda zbytecne vytvaret stale novy socket a to nemluvim o tom neustale opakovanem zavirani spojeni. No nevim, ale myslim, ze by to slo vyresit i jinak :cigo:
Jo a jeste jsem zapomel, ten buffer se mi zda zbytecne velky podle me by to slo vyresit i tak, ze by byl dynamicky :cigo: Jinak ve svem skriptu na tomto serveru to taky nemam dodelany ale to je pouze lenosti jsem presvedceny, ze by to slo :P
tak přemož tu tvoji lenost. Já bych se rád podíval jak to uděláš :tuc:
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
2Rilmi: Ovsem, ze to musi jit vyresit i jinak, ja napsal pouze prvni a nejjednodussi vec, ktera me napadla, nemel jsem cas studovat manualy :o) Rek sem si, ze kdyz uz Blujacker dela multiplayer, tak urcite najde efektivnejsi reseni ;o)
No, az si budu potrebovat odpocinout od programovani v Cecku, tak se na to zkusim mrknout poradne... sice je sitovani v Pythonu ta posledni vec, kterou bych ted chtel resit, ale jednou to stejne budu muset potrebovat ;o) Takze jestli na neco prijdu, tak zkusim vymyslet nejaky trosku lepsi priklad... tam to byl jenom takovej vystrel do tmy, taky se mi to reseni vubec nelibi (vsak jsem to tam taky psal). Jestli ale nekdo prijde s resenim driv, budu rad ;o)
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
jak farundel řekl, už jsem si našel řešení pomocí modulu thread...
EDIT:geon to postnul o 4 vteřiny dřív:)
Ano, to je ono řešení
Edit geon: zdá se mi, že si přivlstnuješ cizí řešení, zdroj si měl uvést ty :-(
Edit:nejdřív tady byl link na tu konferenci a pak sem to postnul a tys už to tam měl tak sem to editnul..
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
geon napsal:
aha, zm?nil jsi to, tak radeji zde nap??i, co jsi tam m?l p?vodn?:
[i]jak farundel rekl, uz jsem si nasel reseni pomoci modulu thread... [/i]
m?j p??sp?vek:
P??sp?vek zm?n?n 16.08.2006 v 12:35:05
tv?j p??sp?vk:
N?zev p??sp?vku: Re: Vytvo?en? serveru - 16.08.2006 12:35:31
ale m?? pravdu, m?l jsem to napsat jinak:(
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Linej jsem porad a krome toho se ted staram o to abych si vychytal gentoo :darth: Jinak pokud se chces neco naucit tak se podivej po knize "Podrobna referencni prirucka pro programovaci jazyk Python", myslim ze je tam vsechno hezky popsany a vysvetleny.
mám:
začínáme programovat v jazyce python
naučte se python
Python podrobně referenční přiručka
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Vytvoření serveru pomocí APACHE — založil Petr
Pripojenie k serveru — založil Stevo
Odezva serveru — založil Redby
Připojení k serveru — založil Valibuk
HW konfigurace serveru — založil WoSSa
Moderátoři diskuze