Vytvoření serveru – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vytvoření serveru – Python – Fórum – Programujte.comVytvoření serveru – Python – Fórum – Programujte.com

 

Jakub Vojáček
~ Moderátor
0
Grafoman
13. 8. 2006   #1
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Farundel0
Super člen
13. 8. 2006   #2
-
0
-

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...

Nahlásit jako SPAM
IP: ...–
To follow the path:
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
Jakub Vojáček
~ Moderátor
0
Grafoman
13. 8. 2006   #3
-
0
-

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...

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Farundel0
Super člen
13. 8. 2006   #4
-
0
-

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)

Nahlásit jako SPAM
IP: ...–
To follow the path:
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
Jakub Vojáček
~ Moderátor
0
Grafoman
14. 8. 2006   #5
-
0
-

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...

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Farundel0
Super člen
14. 8. 2006   #6
-
0
-

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)

Nahlásit jako SPAM
IP: ...–
To follow the path:
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
Jakub Vojáček
~ Moderátor
0
Grafoman
14. 8. 2006   #7
-
0
-

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??..

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Jakub Vojáček
~ Moderátor
0
Grafoman
14. 8. 2006   #8
-
0
-

: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ů???

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Jakub Vojáček
~ Moderátor
0
Grafoman
14. 8. 2006   #9
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Rilmi0
Newbie
16. 8. 2006   #10
-
0
-

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:

Nahlásit jako SPAM
IP: ...–
Rilmi0
Newbie
16. 8. 2006   #11
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Jakub Vojáček
~ Moderátor
0
Grafoman
16. 8. 2006   #12
-
0
-

tak přemož tu tvoji lenost. Já bych se rád podíval jak to uděláš :tuc:

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Farundel0
Super člen
16. 8. 2006   #13
-
0
-

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)

Nahlásit jako SPAM
IP: ...–
To follow the path:
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
geon0
Grafoman
Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
Jakub Vojáček
~ Moderátor
0
Grafoman
16. 8. 2006   #15
-
0
-

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..

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Farundel0
Super člen
16. 8. 2006   #16
-
0
-

Fajn, ale stejne si to budu chtit prostudovat a vymyslet sam, protoze takhle z hotovyho reseni bych se toho moc nenaucil... ;o)

Nahlásit jako SPAM
IP: ...–
To follow the path:
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
geon0
Grafoman
16. 8. 2006   #17
-
0
-

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]

Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
Jakub Vojáček
~ Moderátor
0
Grafoman
16. 8. 2006   #18
-
0
-

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:(

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Rilmi0
Newbie
16. 8. 2006   #19
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Jakub Vojáček
~ Moderátor
0
Grafoman
16. 8. 2006   #20
-
0
-

mám:
začínáme programovat v jazyce python
naučte se python
Python podrobně referenční přiručka

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
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š
Rilmi0
Newbie
17. 8. 2006   #21
-
0
-

Tak to jsi na tom jak ja a myslim, ze v tech knizkach je to dobre popsany

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Pripojenie k serveru — založil Stevo

Odezva serveru — založil Redby

Připojení k serveru — založil Valibuk

HW konfigurace serveru — založil WoSSa

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý