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

Socket problem – Python – Fórum – Programujte.comSocket problem – Python – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
don_Dominique0
Super člen
19. 5. 2008   #1
-
0
-

Zdravím, poztřeboval bych trošku pomoc ... začal sem si programovat bota pro chat ;) ale narazil sme na jednu věc ... jelikož nejsem zkušenej v práci s modulem socket tak nevím jak vyřešit toto:
od serveru příjmám data tímto stylem:

while 1:

line=s.recv(1024)
rint line

ale fce s.recv() ... pořád jenom čeká až server něco pošle a cyklus se proto provede jen tehdy když server nějaká ta data pošle, ale to mi znemožnuje provádět jiné věci v tomto cyklu ... pro příklad chci k i přičítat jedničku
while 1:

line=s.recv(1024)
print line
i+=1

ale ta jednička se přičte právě jenom když přijmu data ze serveru ... nevíte pls jak na to aby se dalo například kontrolovat jestli server něco odeslal ??? a když ne můžu si provádět nějaké jiné příkazy ? mockrát vám děkuju ;) doufam že ste muj dotaz pochopily ;)

Nahlásit jako SPAM
IP: 193.165.176.–
Reklama
Reklama
pawlik0
Grafoman
19. 5. 2008   #2
-
0
-

Zkus pouzit try: a except:

Nahlásit jako SPAM
IP: 89.176.203.–
Sa Nata A Na. Howgh
Blujacker
~ Moderátor
0
Grafoman
19. 5. 2008   #3
-
0
-

To pawlik : V tom to není:)
To don_Dominique : Kdysi jsem řešil stejný problém a nakonec jsem ho myslím i vyřešil. Zkusím pohledat a pak to napíšu sem...

Nahlásit jako SPAM
IP: 213.220.226.–
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š
don_Dominique0
Super člen
19. 5. 2008   #4
-
0
-

To pawlik : nezkoušel sem ale to nepude ... protože to funguje jen při vyvolání výjimky ale mě se žádný výjimka nevyvolává ... ono to prostě jenom čeká a čeká
To Blujacker : to bych ti byl moc vděčnej ;)

Nahlásit jako SPAM
IP: 193.165.176.–
kuomes21
~ Anonymní uživatel
1 příspěvek
19. 5. 2008   #5
-
0
-

Úplně nejzákladnější možnost jak toto řešit v pythonu jsou vlákna, tedy např. modul threading. Doporučuju si najít navody na Googlu, anglicky jich je určitě spousta.

Nahlásit jako SPAM
IP: 212.24.152.–
Blujacker
~ Moderátor
0
Grafoman
19. 5. 2008   #6
-
0
-



#-*- coding: utf-8 -*-
import socket
import thread,threading
from Tkinter import*
DEFAULT_HOST = 'localhost'
DEFAULT_PORT = 43210
class Server(threading.Thread):
def __init__(self, f):
self.f = f
self.S = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.S.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.S.bind((DEFAULT_HOST,DEFAULT_PORT))
self.S.listen(5)
threading.Thread.__init__(self)
self.start()
def run(self):
while True:
try:
newS, address = self.S.accept()
prijato = newS.recv(1024)
self.f(prijato)
newS.close()
finally:
pass
self.S.close()
class App:
def __init__(self):
self.okno = Tk()
Server(self.prijmi_zpravu)
self.vstup = Text(self.okno, width = 100, height = 10)
self.vstup.pack()
self.vystup = Text(self.okno, width = 100, height = 10)
self.vystup.pack()
Button(self.okno, text = "Odeslat", command = self.odeslat).pack(fill = X)
self.okno.mainloop()
def odeslat(self):
text = self.vystup.get(1.0, END)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((DEFAULT_HOST, DEFAULT_PORT))
s.send(text)
s.close()
self.vystup.delete(1.0, END)
def prijmi_zpravu(self, text):
self.vstup.insert(END, "\n%s"%text)
if __name__ == "__main__":
App()

Je to to, co jsi potřeboval?

Nahlásit jako SPAM
IP: 213.220.226.–
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š
don_Dominique0
Super člen
19. 5. 2008   #7
-
0
-

To Blujacker : omlouvam se .. sem dneska už docela mimo a neni mi to docela moc jasný .... mohl bys mi to předvést ja fungujou ty vlákna na tom mym příkladu ? potřeboval bych prostě mít tohle: pokud server nic neodesílá tak třeba přičítej jedničku, když náhodou něco pošle tak to zpracuj ;-) promiň že otravuju ale sem nějak grogy, děkuju za pomoc.

Nahlásit jako SPAM
IP: 193.165.176.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
19. 5. 2008   #8
-
0
-

Tvoje část kódu by nejspíš vypadala nějak takhle:



class add1(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.i=0
def run(self):
while True:
self.i+=1


def f(s):
add1().start()
while True:
s.recv()

Nahlásit jako SPAM
IP: 212.24.152.–
don_Dominique0
Super člen
19. 5. 2008   #9
-
0
-

To Anonymní uživatel : Mockrát děkuju už mi to funguje ;)

Nahlásit jako SPAM
IP: 193.165.176.–
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, 24 hostů

Podobná vlákna

Socket — založil Damian

Socket — založil cniry

C++ socket — založil Dominik Rozporka

Socket — založil janek

Socket — založil Michal Baloun

 

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