Ich versuche gerade ein Chat Programm zu schreiben mit einem GUI.
Es funktioniert im moment so das ich die Clients einzeln verwalte durch das Modul SocketServer.
Jetzt will ich das jeder in der Box die neusten Nachrichten stehen hat.

z.B.:
[127.0.01] [test1]: blablabla
[192.168.178.41] [test2]: blablablabla
beim Server werden die Nachrichten schon alle ausgegeben nur wie schicke ich die Nachrichten wieder zu jedem verbundenen Client zurück ?
Mit UDP würde ich das so lösen:
Code: Alles auswählen
for x in clients:
server.socket.sendto(m, x)
Habt ihr eine Idee ?
Ach ja hier noch die Codes:
Server
Code: Alles auswählen
#! /usr/bin/python
import SocketServer
clients = []
class ChatRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
addr = self.client_address[0]
print "[%s] Verbindung hergestellt" % addr
clients.append(addr)
while True:
m = self.request.recv(1024)
if m:
print "[%s] %s" % (addr, m)
server.socket.send(m)
else:
print "[%s] Verbindung geschlossen" % addr
clients.remove(addr)
break
server = SocketServer.ThreadingTCPServer(("", 50000),
ChatRequestHandler)
server.serve_forever()
Code: Alles auswählen
#! /usr/bin/python
import socket
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from main_window import Ui_mainWindow as main
from login_window import Ui_connectWindow as login
class loginWindow(QtGui.QDialog, login):
def __init__(self):
QtGui.QDialog.__init__(self)
self.setupUi(self)
# Slots
self.connect(self.connectButton,
QtCore.SIGNAL("clicked()"), self.onConnectButton)
def onConnectButton(self):
ip = "%s" % self.IP.text()
nickname = "%s" % self.Nickname.text()
global nickname
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, 50000))
global s
self.mainw = mainWindow()
self.mainw.show()
self.close()
class mainWindow(QtGui.QDialog, main):
def __init__(self):
QtGui.QDialog.__init__(self)
self.setupUi(self)
#Slots
self.connect(self.sendbutton,
QtCore.SIGNAL("clicked()"), self.onSendButton)
def onSendButton(self):
nachricht = self.inputtext.text()
txt = "[%s]: %s" % (nickname,nachricht)
try:
s.send(txt)
txtforbox = s.recv(1024)
self.textBox.setText(txtforbox)
except socket.error:
login.show()
self.close()
app = QtGui.QApplication(sys.argv)
app.setQuitOnLastWindowClosed(True)
login = loginWindow()
login.show()
sys.exit(app.exec_())
s.close()