import socket
import threading
import sys
import pickle
class Server():
def __init__(self):
self.clientes = []
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind(('192.168.1.40', 9090))
self.sock.listen(10)
self.sock.setblocking(False)
accept = threading.Thread(target=self.acceptf)
process = threading.Thread(target=self.processf)
accept.daemon = True
accept.start()
process.daemon = True
process.start()
while True:
msg = input('>')
if msg == 'qq':
self.sock.close()
sys.exit()
else:
pass
def msg_to_all(self, msg, client):
for c in self.clientes:
try:
if c != client:
c.send(msg)
except:
self.clientes.remove(c)
def acceptf(self):
print('---server---')
while True:
try:
conn, addr = self.sock.accept()
conn.setblocking(False)
print('connected by', socket.gethostname() + ' ' + socket.gethostbyname(socket.gethostname()))
self.clientes.append(conn)
except:
pass
def processf(self):
while True:
if len(self.clientes) > 0:
for c in self.clientes:
try:
data = c.recv(1024)
if data:
self.msg_to_all(data,c)
except:
pass
s = Server()
aW1wb3J0IHNvY2tldAppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCBzeXMKaW1wb3J0IHBpY2tsZQoKY2xhc3MgU2VydmVyKCk6CglkZWYgX19pbml0X18oc2VsZik6CgoJCXNlbGYuY2xpZW50ZXMgPSBbXQoKCQlzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCgkJc2VsZi5zb2NrLmJpbmQoKCcxOTIuMTY4LjEuNDAnLCA5MDkwKSkKCQlzZWxmLnNvY2subGlzdGVuKDEwKQoJCXNlbGYuc29jay5zZXRibG9ja2luZyhGYWxzZSkKCgkJYWNjZXB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5hY2NlcHRmKQoJCXByb2Nlc3MgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnByb2Nlc3NmKQoKCgkJYWNjZXB0LmRhZW1vbiA9IFRydWUKCQlhY2NlcHQuc3RhcnQoKQoKCQlwcm9jZXNzLmRhZW1vbiA9IFRydWUKCQlwcm9jZXNzLnN0YXJ0KCkKCgoJCXdoaWxlIFRydWU6CgkJCW1zZyA9IGlucHV0KCc+JykKCQkJaWYgbXNnID09ICdxcSc6CgkJCQlzZWxmLnNvY2suY2xvc2UoKQoJCQkJc3lzLmV4aXQoKQoJCQllbHNlOgoJCQkJcGFzcwoKCglkZWYgbXNnX3RvX2FsbChzZWxmLCBtc2csIGNsaWVudCk6CgkJZm9yIGMgaW4gc2VsZi5jbGllbnRlczoKCQkJdHJ5OgoJCQkJaWYgYyAhPSBjbGllbnQ6CgkJCQkJYy5zZW5kKG1zZykKCQkJZXhjZXB0OgoJCQkJc2VsZi5jbGllbnRlcy5yZW1vdmUoYykKCglkZWYgYWNjZXB0ZihzZWxmKToKCQlwcmludCgnLS0tc2VydmVyLS0tJykKCQl3aGlsZSBUcnVlOgoJCQl0cnk6CgkJCQljb25uLCBhZGRyID0gc2VsZi5zb2NrLmFjY2VwdCgpCgkJCQljb25uLnNldGJsb2NraW5nKEZhbHNlKQoJCQkJcHJpbnQoJ2Nvbm5lY3RlZCBieScsIHNvY2tldC5nZXRob3N0bmFtZSgpICsgJyAnICsgc29ja2V0LmdldGhvc3RieW5hbWUoc29ja2V0LmdldGhvc3RuYW1lKCkpKQoJCQkJc2VsZi5jbGllbnRlcy5hcHBlbmQoY29ubikKCQkJZXhjZXB0OgoJCQkJcGFzcwoKCWRlZiBwcm9jZXNzZihzZWxmKToKCQl3aGlsZSBUcnVlOgoJCQlpZiBsZW4oc2VsZi5jbGllbnRlcykgPiAwOgoJCQkJZm9yIGMgaW4gc2VsZi5jbGllbnRlczoKCQkJCQl0cnk6CgkJCQkJCWRhdGEgPSBjLnJlY3YoMTAyNCkKCQkJCQkJaWYgZGF0YToKCQkJCQkJCXNlbGYubXNnX3RvX2FsbChkYXRhLGMpCgkJCQkJZXhjZXB0OgoJCQkJCQlwYXNzCgoKcyA9IFNlcnZlcigpCg==