Server - Client Problem
Verfasst: Freitag 29. März 2013, 14:08
Hallo,
sicher wurde das Thema schon behandelt, aber es wär trotzdem nett, wenn ihr mir helfen könntet. Nachstehend habe ich mein eingeschränktes Server - Client Programm mal reingestellt. Es klappt auch soweit, allerdings hab ich das Problem, dass die ankommenden Nachrichten beim Client erst mit einem Enter ausgelsen werden. Das ist mir unklar, denn empfangen und senden sind doch in einem Thread gekapselt. Nehme ich noch einen Client dazu, ist das Problem logischerweise dasselbe. Empfangen und senden laufen irgendwie nicht nebenläufig. Vielleicht könnt ihr mir helfen. Nachstehend der Code (verkürzt).
... und der Client
sicher wurde das Thema schon behandelt, aber es wär trotzdem nett, wenn ihr mir helfen könntet. Nachstehend habe ich mein eingeschränktes Server - Client Programm mal reingestellt. Es klappt auch soweit, allerdings hab ich das Problem, dass die ankommenden Nachrichten beim Client erst mit einem Enter ausgelsen werden. Das ist mir unklar, denn empfangen und senden sind doch in einem Thread gekapselt. Nehme ich noch einen Client dazu, ist das Problem logischerweise dasselbe. Empfangen und senden laufen irgendwie nicht nebenläufig. Vielleicht könnt ihr mir helfen. Nachstehend der Code (verkürzt).
Code: Alles auswählen
from threading import *
from socket import *
from convert import * # Byteumwandlung in utf-8
import string
class NetServer:
def __init__(self):
self.__a = Thread(target=self.__accept)
self.__a.start()
self.__t = []
self.__clients = []
def __accept(self):
try:
while True:
sys_name = gethostname()
ip = str(gethostbyname(sys_name))
s = socket(AF_INET, SOCK_STREAM) # Verbindungssocket
s.bind((ip,50007)) # Adressobjet (IP Nummer, Portnummer)
s.listen(5)
print ("Server N° " + ip + " lauscht gebannt")
komm, addr =s.accept() # Kommunikationssocket
self.__clients+=[(komm, addr)]
i=len(self.__clients)-1
print ("Anmeldung von Client No >> " +str(i))
cl = Thread(target=self.__wait, args=[i])
cl.start()
finally: s.close()
def __wait (self,ID):
self.__clients[ID][0].send(str2byte('Client No '+str(ID)+' verbunden\nEingabe >>'))
while True:
t = byte2str(self.__clients[ID][0].recv(1024))
print (t)
if not t: self.__clients[ID][0].close() # schließe Kommunikationssocket
al = t.find ('-all')
if al >=1 :
for i in range (0,len(self.__clients)):
self.__clients[i][0].send(str2byte('Rundansage\t>> '+str(t)))
n = NetServer()
Code: Alles auswählen
from threading import *
from socket import *
from convert import *
class client1:
def __init__(self):
self.__s = None
self.__data = None
self.angemeldet = False
def anmelden(self,server):
self.__server = server
try :
self.__s = socket()
self.__s.connect((self.__server,50007))
except : self.angemeldet = False
self.__a1 = Thread(target= self.__wait)
self.__a1.start()
self.__s1 = Thread(target= self.__senden, args=[])
self.__s1.start()
self.angemeldet = True
return self.angemeldet
def __wait(self):
while 1:
antwort = self.__s.recv(1024)
print ( byte2str(antwort))
def __senden(self):
while 1:
a = str(input ("Nachricht"))
self.__s.send(str2byte(a))
print ("gesendet")
c = client1()
if c.anmelden(" ..... "): print("client 1 angemeldet") #ipv4 - Adrsse